Выбор ответа Middle Kafka в Spring спрашивают часто обновлено
Идемпотентный потребитель
Вопрос
Почему потребитель Kafka должен быть идемпотентным при at-least-once?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Сообщение может прийти повторно после сбоя или ребалансировки. Если обработчик успел записать в БД, но не успел закоммитить offset, сообщение будет доставлено снова.
Варианты ответа
- Kafka всегда доставляет каждое сообщение минимум дважды для надёжности
- Так требуют транзакции продюсера при exactly-once
- Иначе offset не закоммитится после обработки
- Сообщение может прийти повторно после сбоя или ребалансировкиправильный ответ
Разбор
Если обработчик успел записать в БД, но не успел закоммитить offset, сообщение будет доставлено снова. Типичные приёмы: таблица обработанных id сообщений в той же транзакции, upsert вместо insert, проверка состояния. Дублирование не систематическое, а возникает при сбоях. На коммит offset идемпотентность не влияет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.