acks=0 — продюсер не ждёт ответа брокера. Сообщение может потеряться в сети или на брокере, а продюсер не узнает. Подходит для метрик и логов, где потеря допустима.
acks=1 — брокер-лидер записал сообщение в свой журнал (в page cache) и ответил. Если лидер упадёт до того, как реплики скопировали сообщение, а лидером станет реплика без него, — подтверждённое сообщение потеряно.
acks=all (-1) — лидер отвечает, когда сообщение получили все реплики из ISR (in-sync replicas). Потеря возможна только при одновременной потере всех реплик ISR. Задержка выше — нужно дождаться реплик.
Важно вместе: если ISR сжался до одного лидера (реплики отстали), acks=all подтверждает после записи одним лидером. Поэтому задают min.insync.replicas=2 на топике: при меньшем числе синхронных реплик брокер отклоняет запись с ошибкой — лучше отказ, чем ложная надёжность.
Остальное для надёжности продюсера: enable.idempotence=true (без дублей при повторах), достаточные retries и delivery.timeout.ms, обработка ошибок в callback отправки, unclean.leader.election.enable=false.