# ⚖️ Cheatsheet: Kafka so với BullMQ: thiết kế kiến trúc hàng đợi hoàn chỉnh

> This cheatsheet is part of the paid section. Sign in and purchase the course to view the full content.

> [!NOTE]
> Cheatsheet tra cứu nhanh cho toàn bộ khóa học. Dùng khi cần chốt mô hình, chọn công cụ, hoặc nhớ lại cú pháp retry/DLQ.

---

## 1. Bức tranh tổng quan

| Tiêu chí | BullMQ | Kafka |
| --- | --- | --- |
| Bản chất | Hàng đợi công việc (job queue) | Log sự kiện phân tán (event log) |
| Nền tảng | Redis | Cluster broker (tối thiểu 3 broker) |
| Đơn vị dữ liệu | Job | Record |
| Sau khi xử lý xong | Job bị **xóa** | Record **được giữ lại** |
| Số consumer nhận 1 item | Đúng **một** worker | Nhiều consumer group đọc **độc lập** |
| Đọc lại (replay) | Không (job đã xong là mất) | Có, tua offset đọc lại được |
| Mô hình | Task ngắn hạn, xong thì biến mất | Lịch sử sự kiện, append-only |
| Vận hành | Nhẹ, dễ | Nặng, cần đội vận hành |
| Chi phí nhỏ | Rẻ | Đắt (disk, network, broker) |
| Chi phí biên khi lớn | Xấu dần (mọi job nằm trong Redis) | Tốt hơn (scale theo partition) |

**Câu chốt:** hai mô hình khác nhau ở chỗ **dữ liệu xử lý xong thì đi đâu**.

---

## 2. Kafka: bốn khái niệm cốt lõi

| Khái niệm | Định nghĩa | Vai trò |
| --- | --- | --- |
| **Topic** | Cái tên, kênh logic | Đơn vị tổ chức sự kiện |
| **Partition** | Log có thứ tự bên trong topic | **Đơn vị song song hóa** |
| **Offset** | Con trỏ vị trí trong một partition | Đánh dấu consumer đã đọc tới đâu |
| **Consumer group** | Nhóm consumer chia nhau partition | Mỗi group giữ offset riêng, scale ngang |

### Quy tắc vàng của partition

- Thứ tự chỉ được đảm bảo **trong một partition**, không đảm bảo toàn topic.
- Cùng một key (ví dụ `orderId`) đi vào cùng partition, nên giữ được thứ tự cho key đó.
- Số consumer active trong một group **không vượt quá** số partition (consumer thừa sẽ ngồi không).
- Muốn tăng song song hóa: tăng số partition.
