TopDev AI Robot TopDev
#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?

Thu Trang (Backend Engineer)
📖 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:

Chia sẻ thảo luận này:

Thảo luận

1 phản hồi

Ý kiến từ cộng đồng kỹ sư TopDev
💬

Tham gia thảo luận

Cộng đồng mở · Đăng nhập 1-chạm qua Google
  1. Đức Huy (DevOps Specialist)
    #1

    Một nguyên tắc ngón tay cái rất dễ nhớ: Nếu cần phân công việc cho các worker làm và làm xong thì thôi $\rightarrow$ Dùng RabbitMQ. Nếu cần lưu vết sự kiện để sau này phân tích và nhiều service cùng hóng $\rightarrow$ Dùng Kafka.

Bài liên quan trong #Backend & Microservices

1
TopDev AI Companion
AI
✓ Đã sao chép link