логика повторной попытки блокирует основного потребителя, пока он ждет повторной попытки весной

#apache-kafka #spring-kafka

Вопрос:

Я имею в виду:

https://medium.com/trendyol-tech/how-to-implement-retry-logic-with-spring-kafka-710b51501ce2

И это говорит о том, что если мы используем ниже:

 factory.setErrorHandler(new SeekToCurrentErrorHandler(new DeadLetterPublishingRecoverer(kafkaTemplate), 3));
 

Он заблокирует основного потребителя во время ожидания повторной попытки. (https://medium.com/trendyol-tech/how-to-implement-retry-logic-with-spring-kafka-710b51501ce2#:~:text=Also it blocks the main consumer while its waiting for the retry)

Итак, мой вопрос в том, действительно ли нам нужно повторить попытку в основной теме или мы можем переместить неудачные сообщения в тему повторной попытки, а затем обработать сообщения там, чтобы наша основная тема не блокировалась.

Можем ли мы добиться неблокирующей повторной попытки с помощью STCH?

Ответ №1:

Неблокирующие повторные попытки были недавно добавлены в новую версию 2.7.

https://docs.spring.io/spring-kafka/docs/current/reference/html/#retry-topic

Для достижения неблокирующей функции повтора / dlt с помощью Kafka обычно требуется настройка дополнительных тем, а также создание и настройка соответствующих прослушивателей. Начиная с версии 2.7 Spring для Apache Kafka предлагает поддержку этого с помощью @RetryableTopic класса аннотации и конфигурации Retrytopic для упрощения начальной загрузки.

Если обработка сообщения завершается неудачно, сообщение пересылается в тему повторной попытки с отметкой времени возврата. Затем потребитель темы повторной попытки проверяет метку времени, и если это не требуется, он приостанавливает потребление для раздела этой темы. Когда это произойдет, потребление разделов возобновится, и сообщение будет использовано снова. Если обработка сообщения снова завершится неудачно, сообщение будет перенаправлено в следующую тему повторной попытки, и шаблон будет повторяться до тех пор, пока не произойдет успешная обработка или попытки не будут исчерпаны, и сообщение будет отправлено в тему «Мертвая буква» (если настроено).