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

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

  1. Đơn vị nào cần order? (user, order, tenant…)
  2. Đảo thứ tự ngoài đơn vị đó có vỡ invariant không?
  3. Chấp nhận stale ngắn thay vì serialize toàn cục?
  4. Poison trên lane: DLQ hay block? Ai quyết?
  5. Hot key plan? (shard key, merge…)

Đọc tiếp

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ỉ.