Я использую потребитель Spring Kafka, который извлекает сообщения из темы и сохраняет их в базе данных. Если выполняется условие сбоя, например, база данных недоступна, предоставляет ли потребительская библиотека kafka механизм для повторной попытки? Если это так, есть ли способ установить разные интервалы повтора, например, 1-й повтор должен быть выполнен через 5 минут, 2-й через 30 минут, 3-й через 1 час и т. Д.
Spring Kafka Consumer Retry
Ответы (1)
Spring Kafka поставляется с RetryingMessageListenerAdapter
и RetryingAcknowledgingMessageListenerAdapter
. Если вы используете @KafkaListener
, вы можете поставить AbstractKafkaListenerContainerFactory
с RetryTemplate
. И последний может быть введен любыми пользовательскими RetryPolicy
и BackOffPolicy
из проекта Spring Retry:
https://docs.spring.io/spring-kafka/reference/html/#retrying-deliveries
Также имейте в виду, что, начиная с версии 2.0
, в Spring Kafka есть поддержка транзакций, основанная на такой поддержке в Apache Kafka 0.11.x.x
:
https://docs.spring.io/spring-kafka/reference/html/#transactions
person
Artem Bilan
schedule
02.10.2017
Спасибо, Артем, когда у меня 10 смещений скажем в разделе. Если сообщение со смещением 5 не может быть вставлено в БД, будет ли это попытаться на основе конфигурации повтора, которую я установил, в то время как смещения с 6 по 10 продолжают выполняться как часть обычного процесса? или потребитель будет ждать, пока 5 будет успешно завершено? Я предполагаю, что сообщение не будет зафиксировано для смещения 5, пока попытки повторных попыток не будут исчерпаны
- person Punter Vicky; 02.10.2017
Это правильно. Записи в одном разделе обрабатываются последовательно, поэтому
6
не будет обрабатываться, пока 5
не будет успешным или не будет исчерпан при повторной попытке.
- person Artem Bilan; 02.10.2017
Спасибо, последний вопрос. Могу ли я включить повторную попытку только для определенных типов ошибок?
- person Punter Vicky; 02.10.2017
Да, ты можешь. Это
RetryPolicy
ответственность. См. Его JavaDocs и реализации.
- person Artem Bilan; 02.10.2017