#Backend & Microservices#DevOps & Cloud#Kiến trúc & System Design
Phân biệt Message Queue (RabbitMQ) vs Event Streaming (Kafka): Chọn công cụ nào cho dự án?
📖 2 phút đọc 💬 1 phản hồi
⚡ Tóm tắt 30 giây bởi TopDev AI
AI Overview Nhầm lẫn phổ biến giữa Message Queue và Event Streaming Rất nhiều lập trình viên đánh đồng RabbitMQ và Apache Kafka với nhau và coi chúng là hai công cụ có thể thay thế lẫn nhau. Thực tế, triết lý th…
☰ Mục lục bài viết (5 phần) Mở / Đóng mục lục
Nhầm lẫn phổ biến giữa Message Queue và Event Streaming#
Rất nhiều lập trình viên đánh đồng RabbitMQ và Apache Kafka với nhau và coi chúng là hai công cụ có thể thay thế lẫn nhau. Thực tế, triết lý thiết kế (Design Philosophy) của hai hệ thống này hoàn toàn khác biệt:
- RabbitMQ: Là một "Người đưa thư thông minh" (Smart Broker, Dumb Consumer).
- Kafka: Là một "Cuốn sổ nhật ký phân tán chỉ cho phép ghi nối tiếp" (Dumb Broker, Smart Consumer).
1. Cơ chế hoạt động của RabbitMQ#
- Khi producer gửi một message vào Exchange, Exchange định tuyến message vào Queue dựa trên routing key.
- Khi consumer nhận và xác nhận (ACK) message, RabbitMQ sẽ xóa message đó khỏi bộ nhớ.
- Thế mạnh: Định tuyến tin nhắn cực kỳ linh hoạt (Topic, Direct, Fanout), hỗ trợ retry, priority queue, message TTL.
- Phù hợp: Xử lý đơn hàng, gửi email, giao việc cho worker nền.
2. Cơ chế hoạt động của Apache Kafka#
- Message được ghi vào các Partition dưới dạng Append-only log.
- Consumer đọc message theo vị trí con trỏ (Offset). Khi consumer đọc xong, message KHÔNG bị xóa.
- Một message có thể được đọc lại nhiều lần bởi nhiều nhóm consumer khác nhau, hoặc đọc lại lịch sử từ 7 ngày trước.
- Thế mạnh: Throughput siêu khủng (hàng triệu sự kiện/giây), lưu trữ dữ liệu bền vững theo thời gian.
- Phù hợp: Log aggregation, Event Sourcing, theo dõi hành vi người dùng (Clickstream), phân tích dữ liệu thời gian thực.
Bảng so sánh tiêu chuẩn chọn lựa#
| Tiêu chí | RabbitMQ | Apache Kafka |
|---|---|---|
| Lưu trữ Message | Xóa ngay sau khi consumer ACK | Lưu trữ cố định trên đĩa (retention days) |
| Throughput | ~20.000 - 50.000 msgs/s | > 1.000.000 msgs/s |
| Khả năng đọc lại lịch sử | Không hỗ trợ | Rất dễ dàng (Replay offset) |
| Độ phức tạp vận hành | Nhẹ nhàng, dễ setup | Phức tạp (cần KRaft / ZooKeeper) |
Góc thảo luận#
Dự án của bạn đang dùng RabbitMQ hay Kafka? Bạn đã bao giờ phải dùng tính năng Replay offset của Kafka để phục hồi dữ liệu khi code có bug chưa?
Xem thêm nội dung liên quan:
Tác giả bài viết
Thu Trang (Backend Engineer)
Tham gia từ thg 6 2026 · 15 bài viết · 25 phản hồi
Thảo luận
1 phản hồi
💬
Tham gia thảo luận
Cộng đồng mở · Đăng nhập 1-chạm qua Google
Bài liên quan trong #Backend & Microservices
-
Áp dụng Model Context Protocol (MCP) của Anthropic để kết nối AI với Postgres và Docker
Hoàng Nam (Tech Lead) · 💬 1 -
So sánh mô hình Embedding đa ngữ: OpenAI text-embedding-3 vs BGE-M3 vs Cohere
Minh Trí (AI Engineer) · 💬 1 -
Xây dựng Voice AI Agent thời gian thực với WebRTC và Whisper Live: Độ trễ dưới 500ms
Lan Anh (Senior Frontend) · 💬 1 -
Cấu hình Rate Limiting ở tầng Nginx và API Gateway: Chống DDOS Layer 7 hiệu quả
Đức Huy (DevOps Specialist) · 💬 1 -
Tokenization tiếng Việt của các LLM: Tại sao chi phí tiếng Việt đắt gấp 3 lần tiếng Anh?
Minh Trí (AI Engineer) · 💬 1