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.
Checklist trước khi “resend production”
- Channel shared hay private group?
- Ai còn listen? Idempotent chưa?
- Có error topic riêng không?
- Redrive có bound không?
- 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.