Можно ли избежать дублей при повторной отправке сообщения продюсером Kafka, если сообщение дошло до Kafka, но ack был потерян из-за падения сервиса?

Идемпотентный producer Kafka защищает от дублей его внутренних повторов, но не от любой повторной бизнес-отправки после перезапуска. Для неё нужен стабильный event_id и дедупликация.

Короткий ответ

Что ответить на собеседовании

Идемпотентный producer Kafka защищает от дублей его внутренних повторов, но не от любой повторной бизнес-отправки после перезапуска. Для неё нужен стабильный event_id и дедупликация.

Подробный разбор

Ответ с пояснениями

Идемпотентный producer Kafka защищает от дублей его внутренних повторов, но не от любой повторной бизнес-отправки после перезапуска. Для неё нужен стабильный event_id и дедупликация.

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

Источник: Документация Apache Kafka.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее