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

Shared channel: nhiều consumer group / app đọc cùng log (billing + analytics + audit…).

Group A fail. On-call A resend message vào topic “cho chắc”. Group B đã xử lý xong → lần hai (email double, metric double, trừ tiền nếu không idempotent).

Shared log là multi-tenant failure domain: recover local có thể thành broadcast.

Vì sao “của tôi” không chỉ của tôi

  • Offset/group độc lập — B không biết A đang panic.
  • Resend = event mới (hoặc re-append) cho mọi subscriber.
  • Ignore phía A không xóa nhu cầu B; resend phía A không phải tool riêng A.

An toàn hơn

1) Retry / error / DLQ channel RIÊNG group (private)
2) Mọi consumer trên shared: idempotent theo event id
3) Unblock A bằng DLQ private — không nhét lại shared “tạm”
4) Fan-out có chủ đích: document ai subscribe gì
5) Tool admin resend: require reason + scope (group vs broadcast)

Matrix recovery: resend shared = NO mặc định — playbook.

Single group vs shared

  • Single group work queue: resend/requeue thường OK hơn (cùng “tenant” logic).
  • Shared stream: coi như bus đa app — thay đổi traffic ảnh hưởng hàng xóm.

Fan-out vs work queue.

Checklist trước khi “resend production”

  1. Channel shared hay private group?
  2. Ai còn listen? Idempotent chưa?
  3. Có error topic riêng không?
  4. Redrive có bound không?
  5. Order / wrong risk trên projection?

Một câu để nhớ

Shared log là chung cư — sửa ống nước nhà bạn đừng ngập tầng dưới.
Recover local đừng thành broadcast.