Kafka: Partition, Producer, Consumer, Commit¶
🟠 Quan trọng · Streaming / Kafka
Các thành phần chính¶
| Thành phần | Vai trò |
|---|---|
| Topic | Kênh dữ liệu ("đường ống"). VD: topic "transactions" |
| Partition | Chia topic để song song hóa. Dữ liệu trong partition được sắp xếp theo offset |
| Producer | Gửi (ghi) message vào topic |
| Consumer | Đọc message từ topic |
| Consumer Group | Nhóm consumer cùng đọc 1 topic. Mỗi partition chỉ 1 consumer đọc → không trùng |
Chia Partition¶
- Có key:
hash(key) % num_partitions→ cùng key luôn vào cùng partition → đảm bảo thứ tự - Không key: Round-robin
- Số partition >= số consumer trong group để tận dụng song song
Commit là gì?¶
Consumer đọc xong → commit offset = đánh dấu "đã xử lý đến đây".
| Loại | Mô tả | Rủi ro |
|---|---|---|
| Auto-commit | Kafka tự commit định kỳ | Mất message nếu consumer chết giữa chừng |
| Manual commit | Tự commit sau khi xử lý xong | An toàn hơn, nhưng phức tạp hơn |
Watermark¶
Watermark = mốc thời gian để Kafka/Flink biết "sẽ không chờ event cũ hơn mốc này nữa".
- Set watermark lâu hơn → bắt được nhiều late event hơn, nhưng state giữ lâu → tốn RAM, kết quả ra trễ
- Set watermark ngắn → kết quả nhanh, nhưng có thể bỏ sót late event
Xử lý Duplicate Event & Late Event¶
| Vấn đề | Giải pháp |
|---|---|
| Duplicate event | Dedup theo event ID; idempotent processing (upsert thay vì insert) |
| Late event | Watermark + side output / dead letter queue |
| Kafka lag | Tăng số consumer, tăng số partition, tối ưu batch size |