Ba mức đảm bảo khi giao message:
- At-most-once: gửi tối đa một lần — có thể mất message nhưng không trùng. Hợp dữ liệu chấp nhận mất (metric, log tạm).
- At-least-once: không mất, nhưng có thể trùng (retry khi ack thất lạc). Phổ biến nhất; consumer phải tự xử lý trùng.
- Exactly-once: không mất, không trùng — lý tưởng nhưng đắt và khó trong hệ phân tán.
Thực tế đa số hệ chọn at-least-once + consumer idempotent (dùng key/dedup để bỏ bản trùng) → kết quả tương đương exactly-once nhưng rẻ hơn. Kafka hỗ trợ exactly-once trong phạm vi nhất định (idempotent producer + transaction), nhưng đảm bảo end-to-end vẫn cần consumer idempotent.