Poison message là message luôn làm consumer lỗi. Vì consumer không ack, broker giao lại, consumer lại lỗi — tạo vòng lặp vô hạn chiếm trọn công suất consumer và các message hợp lệ phía sau bị đói.
Nguyên nhân thường gặp: payload sai schema, tham chiếu tới bản ghi đã bị xoá, giá trị vượt ngưỡng gây lỗi ép kiểu, hoặc bug logic chỉ xảy ra với một trường hợp dữ liệu cụ thể.
Cách chặn:
- Đếm số lần giao lại và chặn cứng. RabbitMQ quorum queue có
x-delivery-limit: quá ngưỡng thì message bị dead-letter tự động thay vì requeue mãi. Kafka không requeue nên biểu hiện khác: consumer kẹt tại một offset, phải tự đếm số lần thử rồi chủ động đẩy sang DLQ và commit offset để đi tiếp. basic.rejectvớirequeue=falsecho lỗi vĩnh viễn thay vìrequeue=true— requeue đưa message về đúng vị trí cũ và lặp lại ngay.- Validate ở biên: parse và kiểm tra schema trước khi chạm vào logic nghiệp vụ; parse lỗi → DLQ ngay, không retry.
- Cảnh báo theo redelivery: metric số message có cờ
redeliveredtăng bất thường là dấu hiệu sớm.
Dấu hiệu nhận ra khi vận hành: throughput tụt nhưng CPU consumer vẫn cao, log lặp cùng một lỗi với cùng một message id, queue depth tăng dù consumer vẫn "đang chạy".