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

Ошибка отправки KafkaTemplate

Вопрос

Код вызывает kafkaTemplate.send(topic, key, event) и не использует результат. Брокер недоступен. Что увидит код?

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

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

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

Коротко

Правильный ответ: Ничего сразу: ошибка придёт в непроверенную CompletableFuture. send кладёт запись в буфер продюсера и возвращает CompletableFuture<SendResult.

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

  1. Немедленное исключение KafkaException в месте вызова send
  2. Метод заблокируется навсегда до восстановления брокера
  3. Ничего сразу: ошибка придёт в непроверенную CompletableFutureправильный ответ
  4. Сообщение сохранится на диск и гарантированно отправится позже

Разбор

send кладёт запись в буфер продюсера и возвращает CompletableFuture<SendResult>. При недоступном брокере продюсер повторяет попытки до delivery.timeout.ms, а потом завершает future с ошибкой. Если результат не обработан, потеря незаметна. Метод может заблокироваться только до max.block.ms при заполненном буфере или отсутствии метаданных. Локального надёжного хранилища у продюсера нет, для гарантий нужен outbox.

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

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

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