Выбор ответа Middle Kafka в Spring спрашивают часто обновлено

Идемпотентный потребитель

Вопрос

Почему потребитель Kafka должен быть идемпотентным при at-least-once?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Сообщение может прийти повторно после сбоя или ребалансировки. Если обработчик успел записать в БД, но не успел закоммитить offset, сообщение будет доставлено снова.

Варианты ответа

  1. Kafka всегда доставляет каждое сообщение минимум дважды для надёжности
  2. Так требуют транзакции продюсера при exactly-once
  3. Иначе offset не закоммитится после обработки
  4. Сообщение может прийти повторно после сбоя или ребалансировкиправильный ответ

Разбор

Если обработчик успел записать в БД, но не успел закоммитить offset, сообщение будет доставлено снова. Типичные приёмы: таблица обработанных id сообщений в той же транзакции, upsert вместо insert, проверка состояния. Дублирование не систематическое, а возникает при сбоях. На коммит offset идемпотентность не влияет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме