Kafka (và họ stream): producer chọn key → hash → partition. Broker đảm bảo order trong partition, không global topic.
Đó là cách mua order budget “đủ dùng” (per aggregate) mà vẫn scale nhiều partition.
Key = đơn vị cần thứ tự
Cần: create order trước pay order (cùng orderId)
→ key = orderId
Cần: mọi mutation số dư account tuần tự
→ key = accountId
Không cần order giữa hai user lạ
→ không nhét chung một key
Thô vs mịn
-
Quá thô (
tenantIdlớn): ít partition hiệu dụng, hot tenant, khó scale. - Quá mịn (random / UUID mỗi event): scale max, mất invariant create→update → wrong projection.
Hot key
Một account “nổi tiếng” / flash sale một SKU → một partition quá
tải trong khi partition khác rảnh. Hướng: sub-shard
(accountId + bucket) + merge lúc đọc; hoặc tách path
nóng.
Đổi key / số partition
- Tăng partition không tự rebalance message cũ — plan migration.
- Đổi schema key giữa chừng → order “gãy” với lịch sử; document.
Consumer
Trong consumer group, một partition ~ một member (tại một thời điểm). Parallel = nhiều partition / nhiều key. Poison một partition chặn key đó — unblock quan trọng.
Một câu
Key là chỗ bạn mua order — chọn theo đơn vị business, không theo
thói quen.
Thô thì nóng; mịn thì sai thứ tự.