Trung BìnhKafka iconKafka

At-least-once vs at-most-once vs exactly-once trong Kafka: phân biệt và cách đạt được mỗi loại?

At-most-once (fire-and-forget): producer acks=0, consumer commit offset trước khi xử lý — message có thể mất, không bao giờ duplicate.

  • Dùng cho metrics/log không cần chính xác tuyệt đối. At-least-once: producer acks=all + retries, consumer commit sau khi xử lý thành công — không mất message nhưng có thể xử lý trùng (duplicate) khi consumer crash sau xử lý nhưng trước commit.
  • Yêu cầu consumer logic phải idempotent. Exactly-once: khó nhất, cần cả producer và consumer phối hợp.
  • Producer: bật enable.idempotence=true + Kafka Transactions (transactional.id).
  • Consumer: isolation.level=read_committed + đặt offset commit trong cùng transaction với business logic (nếu write ra DB phải là transactional outbox).
  • Kafka Streams với processing.guarantee=exactly_once_v2 tự handle toàn bộ.
  • Exactly-once có overhead ~20-30% latency — chỉ dùng cho billing, financial transactions.

Xem toàn bộ Kafka cùng filter theo level & chủ đề con.

Mở danh sách Kafka