Event-Driven Architecture: Kafka, RabbitMQ, Apache Pulsar

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ý.

Sơ đồ Event-Driven Architecture producer broker consumer

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.

So sánh kiến trúc Kafka, RabbitMQ và Apache Pulsar

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

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

WebSocket thời gian thực trong web

WebSocket là gì? WebSocket là giao thức truyền thông hai chiều (full-duplex) qua một kết nối TCP duy nhất, cho phép server và client trao đổi dữ liệu thời gian…

Xem thêm
Polars DataFrame featured image comparison chart

Polars DataFrame: Thay thế Pandas cho xử lý dữ liệu lớn hiệu năng cao

Polars DataFrame là gì? Polars DataFrame là thư viện xử lý dữ liệu hiệu năng cao viết bằng Rust, được thiết kế như một sự thay thế nhanh hơn và…

Xem thêm

Local-First Software & CRDT: Xây dựng app offline-first, sync không cần server trung tâm

Local-first software là triết lý thiết kế ứng dụng mà dữ liệu chính lưu trữ trên thiết bị người dùng trước, không phụ thuộc server trung tâm. Sync tự động…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất