Идемпотентный producer Kafka защищает от дублей его внутренних повторов, но не от любой повторной бизнес-отправки после перезапуска. Для неё нужен стабильный event_id и дедупликация.
Можно ли избежать дублей при повторной отправке сообщения продюсером Kafka, если сообщение дошло до Kafka, но ack был потерян из-за падения сервиса?
Идемпотентный producer Kafka защищает от дублей его внутренних повторов, но не от любой повторной бизнес-отправки после перезапуска. Для неё нужен стабильный event_id и дедупликация.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Идемпотентный producer Kafka защищает от дублей его внутренних повторов, но не от любой повторной бизнес-отправки после перезапуска. Для неё нужен стабильный event_id и дедупликация.
Producer использует идентификатор и последовательности записей, чтобы брокер распознал повтор отправки в рамках соответствующей сессии. Если приложение после сбоя заново вызывает отправку того же события как нового, одной этой настройки недостаточно. Транзакционный producer помогает восстанавливать транзакционный поток, но не решает автоматически атомарность с внешней БД. Обычно событие фиксируют в outbox, а потребитель идемпотентно применяет его по event_id; потерянный ack не считается доказательством недоставки.
Источник: Документация Apache Kafka.