Product: “Event phải đúng thứ tự.” Engineering bật một partition, một consumer, mọi thứ serialize — p99 chết, hot key, một poison chặn cả thế giới.
Timeout budget giới hạn thời gian bạn chịu trả. Order budget giới hạn yêu cầu thứ tự bạn chịu trả (latency, dual complexity, head-of-line blocking).
Các mức order (từ đắt → rẻ)
Global total order — mọi event A trước B trên toàn hệ (rất đắt, hiếm)
Per-key / per-aggregate— order trong accountId / orderId (đủ hầu hết)
Causal / “happens-after” có chọn lọc
Best-effort — chấp nhận xáo nhẹ, reconcile sau
No order — competing workers thoải mái
Hỏi product bằng tiếng business, không bằng Kafka: “Hai event của hai user khác nhau đảo thứ tự có vỡ money path không?” Thường là không → đừng mua global order.
Bạn trả giá gì khi order chặt
- Head-of-line blocking: một message chậm/hỏng chặn cả key/partition — unblock trở thành bắt buộc có chủ đích.
- Khó scale: một key “nóng” (celebrity account) = một lane quá tải.
- Resend / multi-writer: dễ phá order → wrong trên projection.
- Latency: phải chờ event trước xong mới apply sau, dù business không cần.
Per-key — mức hay “đủ dùng”
Stream/Kafka: order mạnh trong partition. Chọn partition key = đơn vị business (orderId, accountId, tenant+resource) — xem partition key.
Cùng accountId → create trước update (đúng)
Khác accountId → song song OK
Global “mọi account” → thường không cần
Order vs purpose channel
- Write: thường per-aggregate; hiếm global. Unblock quan trọng hơn “giữ order tuyệt đối trên cả topic”.
- Read / projection: per-key order hay bắt buộc để tránh wrong; skip bừa = missing.
- Shared: resend phá order cho group khác — resend shared.
Matrix: recovery playbook.
Checklist với product / design
- Đơn vị nào cần order? (user, order, tenant…)
- Đảo thứ tự ngoài đơn vị đó có vỡ invariant không?
- Chấp nhận stale ngắn thay vì serialize toàn cục?
- Poison trên lane: DLQ hay block? Ai quyết?
- Hot key plan? (shard key, merge…)
Đọc tiếp
- Timeout budget — anh em “ngân sách”.
- Queue vs stream — offset vs destructive.
- Stale · thiếu · sai — wrong vì out-of-order.
Một câu để nhớ
Order là ngân sách — chi đúng chỗ business vỡ, đừng mặc định tuyệt
đối.
Per-key thường đủ; global order là hàng xa xỉ.