Preview Bản nháp chờ review — title, nội dung, link có thể sửa trước khi bỏ nhãn.

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ô (tenantId lớ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ự.