Ответ вслух Middle Kafka в Spring спрашивают часто обновлено

Надёжный потребитель Kafka

Вопрос

Как вы спроектируете надёжный потребитель Kafka на Spring Boot, который пишет в базу?

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Начинаю с гарантий: работаю в at-least-once, offset коммитится после успешной обработки, поэтому обработчик идемпотентный. В той же транзакции БД записываю id сообщения в таблицу обработанных или делаю upsert, повтор ничего не испортит.

Что должно прозвучать в ответе

  • Ключ сообщения и порядок внутри партиции

  • At-least-once: коммит после обработки

  • Идемпотентность: таблица обработанных id или upsert в той же транзакции

  • DefaultErrorHandler с backoff и DLT, неретраибельные ошибки сразу в DLT

  • ErrorHandlingDeserializer для ядовитых сообщений

  • Концурентность не больше числа партиций, контроль max.poll.interval.ms, метрики лага

Что могут спросить следом

  • Блокирующие или неблокирующие повторы?
  • Как переобработать сообщения из DLT?

Разбор

Начинаю с гарантий: работаю в at-least-once, offset коммитится после успешной обработки, поэтому обработчик идемпотентный. В той же транзакции БД записываю id сообщения в таблицу обработанных или делаю upsert, повтор ничего не испортит. Ошибки обрабатываю DefaultErrorHandler: несколько повторов с экспоненциальной паузой для временных сбоев, а для ошибок валидации и десериализации сразу DeadLetterPublishingRecoverer в DLT. Десериализацию оборачиваю ErrorHandlingDeserializer, чтобы ядовитое сообщение не стопорило партицию. Если порядок не важен, а внешний сервис может лежать долго, беру неблокирующие повторы через @RetryableTopic. Concurrency ставлю не больше числа партиций, слежу, чтобы обработка пачки укладывалась в max.poll.interval.ms, и мониторю consumer lag. Для DLT есть процедура разбора и повторной публикации.

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

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

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