Trung BìnhKafka iconKafka

Offset management trong Kafka là gì? Phân biệt auto commit và manual commit?

Offset là số thứ tự của message trong một partition, bắt đầu từ 0.

  • Kafka lưu offset của consumer vào một internal topic tên __consumer_offsets.
  • Auto commit (enable.auto.commit=true) sẽ tự động commit offset theo chu kỳ auto.commit.interval.ms (mặc định 5000ms), nhưng có thể dẫn đến mất message nếu consumer crash SAU khi auto-commit nhưng TRƯỚC khi xử lý xong message đó, hoặc xử lý trùng nếu consumer crash sau khi xử lý nhưng trước khi auto commit.
  • Manual commit (commitSync() hoặc commitAsync()) cho phép kiểm soát chính xác: chỉ commit sau khi xử lý thành công. commitSync() block cho đến khi commit thành công, commitAsync() không block nhưng cần callback để xử lý lỗi.
  • Trong production, nên dùng manual commit kết hợp với idempotent processing để đảm bảo at-least-once hoặc exactly-once semantics.

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

Mở danh sách Kafka