
Event-Driven Architecture là gì?
Event-Driven Architecture (EDA) là kiến trúc phần mềm xây dựng xung quanh sự kiện — các thay đổi trạng thái trong hệ thống được phát hiện, thu thập và phản hồi theo thời gian thực. Thay vì các service gọi trực tiếp nhau qua API đồng bộ, chúng giao tiếp qua message broker: producer publish event, broker lưu trữ và route, consumer subscribe và xử lý.

EDA phù hợp với hệ thống có nhiều service độc lập, cần khả năng mở rộng cao, và yêu cầu phản hồi gần như tức thì — ví dụ: e-commerce, fintech, IoT, real-time analytics.
Tại sao cần Event-Driven Architecture?
Kiến trúc monolithic và request-response có nhiều hạn chế khi hệ thống lớn:
- Tight coupling: Service A phải biết địa chỉ, schema, và availability của Service B. Nếu B sập, A fail.
- Latency dây chuyền: Mỗi hop đồng bộ thêm ~50-200ms. Với 5-6 service gọi nhau, tổng latency có thể vượt 1 giây.
- Không mở rộng được: Scale A đồng nghĩa phải scale B, C, D dù chúng không cần nhiều resource.
- Point-to-point quản lý khó: N có service, ta có O(n²) kết nối. Thêm một service mới đòi hỏi update tất cả các service liên quan.
3 message broker phổ biến: Kafka, RabbitMQ, Apache Pulsar
Trong số các giải pháp EDA, ba cái tên nổi bật là Kafka, RabbitMQ và Apache Pulsar. Mỗi cái phục vụ use case khác nhau.
Kafka: High-throughput, distributed streaming
Apache Kafka là distributed event streaming platform. Data được lưu trong topic như append-only log, có thể replay lại từ bất kỳ offset nào. Kafka được thiết kế cho throughput cực cao: hàng trăm MB/s mỗi broker, hàng triệu message/giây với cluster.
- Ưu điểm: Throughput cao, persistent storage built-in, ecosystem lớn (Kafka Connect, Kafka Streams, ksqlDB), replay capability.
- Nhược điểm: Operations phức tạp, cần Zookeeper/KRaft, latency không phải thấp nhất (~5-20ms p99), consumer group coordination phức tạp.
- Dùng khi: Event sourcing, log aggregation, real-time analytics, microservices communication với hàng triệu event/giây.
RabbitMQ: Flexible routing, low latency
RabbitMQ là message broker truyền thống, triển khai AMQP 0.9.1. Nó mạnh ở routing: exchange nhận message từ producer, route đến queue dựa trên rules (direct, topic, fanout, headers).
- Ưu điểm: Dễ setup và vận hành, routing linh hoạt, latency thấp (~1-5ms), hỗ trợ nhiều protocol (AMQP, MQTT, STOMP).
- Nhược điểm: Throughput thấp hơn Kafka (~20K-50K msg/s), lưu trữ memory/disk đơn giản hơn, không có replay linh hoạt như Kafka.
- Dùng khi: Task queue, background job processing, RPC pattern, microservices nhỏ với latency yêu cầu thấp.

Apache Pulsar: Tiered storage, geo-replication
Apache Pulsar kết hợp ưu điểm của Kafka và message broker truyền thống. Nó tách storage (BookKeeper) khỏi broker (Pulsar broker), cho phép scale độc lập. Tiered storage đẩy data cũ về S3, giữ broker nhẹ.
- Ưu điểm: Multi-tenancy native, geo-replication built-in, tiered storage, throughput cao như Kafka (~1M msg/s), latency thấp (~5-10ms p99), hỗ trợ cả streaming và queue trong cùng một system.
- Nhược điểm: Ecosystem nhỏ hơn Kafka, documentation ít hơn, operations phức tạp hơn RabbitMQ.
- Dùng khi: Multi-tenant SaaS, geo-replication, mixed workload (streaming + queue), data lake ingestion.
So sánh nhanh Kafka vs RabbitMQ vs Pulsar
| Tiêu chí | Apache Kafka | RabbitMQ | Apache Pulsar |
|---|---|---|---|
| Throughput | Cao nhất (~1M msg/s) | Trung bình (~50K msg/s) | Cao (~1M msg/s) |
| Latency p99 | ~5-20ms | ~1-5ms | ~5-10ms |
| Routing | Partition-based | Exchange/queue linh hoạt | Topic + subscription |
| Storage | Distributed log | Memory/disk queue | Tiered storage (BookKeeper + S3) |
| Replay | Có (offset-based) | Có giới hạn | Có (cursor-based) |
| Multi-tenancy | Cần config thủ công | Hạn chế | Native |
| Ecosystem | Rất lớn | Lớn | Đang phát triển |
| Ops độ khó | Cao | Thấp | Trung bình-Cao |
Lựa chọn broker cho dự án của bạn
Chọn RabbitMQ nếu: Team nhỏ, cần low latency, routing phức tạp, task queue hoặc RPC. Dễ deploy, dễ debug, phù hợp MVP và microservices nhỏ.
Chọn Kafka nếu: Cần throughput cực cao, event sourcing, log aggregation, analytics real-time, đã có team vận hành Kafka. Ecosystem lớn, tài liệu dồi dào.
Chọn Pulsar nếu: Cần multi-tenancy, geo-replication, tiered storage, mixed workload. Phù hợp SaaS, data platform, nếu bạn chấp nhận ecosystem nhỏ hơn.
Nguồn tham khảo: Apache Kafka Documentation, RabbitMQ Documentation, Apache Pulsar Documentation
