Выбор ответа Middle Kafka в Spring обновлено

Ядовитое сообщение

Вопрос

В топик попало сообщение, которое не десериализуется. Потребитель без ErrorHandlingDeserializer. Что произойдёт?

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

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

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

Коротко

Правильный ответ: Ошибка до слушателя, offset не сдвигается, сообщение читается снова. Десериализация происходит в poll, до вызова слушателя, и без обёртки это исключение не обрабатывается обычным путём, партиция застревает.

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

  1. Ошибка до слушателя, offset не сдвигается, сообщение читается сноваправильный ответ
  2. Сообщение молча пропускается, а offset сдвигается на следующее сообщение
  3. Kafka удаляет некорректное сообщение из партиции сама
  4. Слушатель получает null вместо объекта и обрабатывает его

Разбор

Десериализация происходит в poll, до вызова слушателя, и без обёртки это исключение не обрабатывается обычным путём, партиция застревает. ErrorHandlingDeserializer перехватывает ошибку и передаёт её обработчику ошибок контейнера, который отправит сообщение в DLT. Kafka сама ничего не удаляет, кроме как по retention.

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

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

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