From idempotence to EOS
Idempotent vs transactional
- Idempotent producer — sequence numbers per (producer-id, partition); broker drops duplicates on retry. Per-partition guarantee.
- Transactional producer —
transactional.id+initTransactions()+beginTransaction()/commitTransaction()/abortTransaction(). Atomic writes across multiple partitions and the consumer-offsets topic. This is what unlocks exactly-once stream processing (read → process → write).
Pair with consumers set to isolation.level=read_committed so they skip aborted records.