В конфигурации производителя Kafka есть опция ( повторные попытки свойство) для выполнения автоматических попыток в случае повторяемых исключений, таких как исключение NoLeaderForPartition, исключение NetworkException, исключение TimeoutException и т.д.
Свойство повторяет имеет значение по умолчанию как Целое число. МАКС согласно https://kafka.apache.org/documentation/#producerconfigs .
Я использовал spring-kafka 2.2.8-RELEASE в приложении и попытался протестировать поведение повтора, отключив одного из брокеров из кластера Кафки. Он вызвал исключение Notleaderforpartition, так как брокер лидеров для раздела вышел из строя, и для назначения нового лидера этому разделу потребовалось 1-2 секунды.
Согласно документации, продюсер должен был уйти в отставку из-за этого исключения, но, к удивлению, этого не произошло. Копая дальше, выяснилось, что в выпуске spring-kafka 2.2.8 (август 2019 года, последняя версия в центральном репозитории) используется версия 2.0.1 kafka-клиенты библиотека, тогда как последняя версия библиотеки kafka-clients – 2.3.0. В версии kafka-клиенты 2.0.1 значение по умолчанию для повторных попыток равно 0.
Урок, который я извлекаю из этого, заключается в том, что последняя версия библиотеки spring не обязательно должна использовать последнюю версию реальной клиентской библиотеки. Также нам нужно понять, к какой версии клиентской библиотеки относится документация.
Оригинал: “https://dev.to/nagarajan/kafka-producer-retries-in-spring-kafka-49fl”