acks=all that isn’t
Since 3.0 the producer default is acks=all — but acks=all waits for the in-sync replicas, not all replicas. When a follower lags or restarts it’s ejected from the ISR rather than blocking writes, so “all” silently shrinks toward just the leader. With min.insync.replicas left at 1, Kafka happily acknowledges a write that lives on exactly one disk; if that leader then dies, the acknowledged record is gone. The strong-looking default is neutralised by the weak one next to it.
# broker / topic — the trap that survived the 3.0 change min.insync.replicas = 1◂ acks=all now means “one disk” # producer (already the 3.0+ default — not the problem) acks = all
Set min.insync.replicas=2 with replication.factor=3; acks=all is already the default.
Tradeoff — A partition that drops below 2 in-sync replicas now rejects writes (NotEnoughReplicasException) — availability traded for durability, the correct trade for anything you can’t reproduce.