Поток Spring Cloud Kafka Binder autoCommitOnError= false вызывает неожиданное поведение

#apache-kafka #stream #spring-cloud-stream

#apache-kafka #поток #spring-cloud-stream

Вопрос:

Я использую Spring Boot 2.1.1.RELEASE и Spring Cloud Greenwich.RC2, а управляемая версия для spring-cloud-stream-binder-kafka равна 2.1.0RC4. Версия Kafka 1.1.0. Я установил следующие свойства, поскольку сообщения не должны использоваться в случае ошибки.

 spring.cloud.stream.bindings.input.group=consumer-gp-1
...
spring.cloud.stream.kafka.bindings.input.consumer.autoCommitOnError=false
spring.cloud.stream.kafka.bindings.input.consumer.enableDlq=false
spring.cloud.stream.bindings.input.consumer.max-attempts=3
spring.cloud.stream.bindings.input.consumer.back-off-initial-interval=1000  
spring.cloud.stream.bindings.input.consumer.back-off-max-interval=3000 
spring.cloud.stream.bindings.input.consumer.back-off-multiplier=2.0  
.... 
  

В разделе Kafka есть 20 разделов, и Kerberos используется для аутентификации (не уверен, уместно ли это).

Пользователь Kafka вызывает веб-службу для каждого обрабатываемого им сообщения, и если веб-служба недоступна, то я ожидаю, что пользователь попытается обработать сообщение 3 раза, прежде чем перейти к следующему сообщению. Итак, для моего теста я отключил веб-сервис, и поэтому ни одно сообщение не могло быть обработано правильно. Из журналов я вижу, что это происходит.

Через некоторое время я остановил, а затем перезапустил Kafka consumer (веб-сервис по-прежнему отключен). Я ожидал, что после перезапуска пользователя Kafka он попытается обработать сообщения, которые не были успешно обработаны в первый раз. Из журналов (я распечатал каждое сообщение с его полями) после перезапуска пользователя Kafka я не мог видеть, что это происходит. Я думал, что раздел может на что-то влиять, но я проверил журналы, и все 20 разделов были назначены этому единственному потребителю.

Есть ли свойство, которое я пропустил? Я думал, что ожидаемое поведение при втором перезапуске пользователя заключается в том, что Kafka broker снова передаст записи, которые не были успешно обработаны, потребителю.

Спасибо

Комментарии:

1. >Then after retrying many records 3 times, record 3 is retried again but not record 1 or 2. Эта часть не имеет смысла; запущенное приложение не должно возвращаться к «записи 3». Возможно, отредактируйте вопрос, добавив несколько журналов, чтобы показать поведение, которое вы видите.

2. Привет, Гэри, я отредактировал вопрос. Спасибо

3. Привет, я хотел бы закрыть вопрос, поскольку параметры работают так, как ожидалось. Я допустил ошибку при просмотре журналов, поскольку использовалось много сообщений. Я изменил тест, чтобы в нем было только 2 раздела, и я ограничил количество сообщений, публикуемых в теме, чтобы я мог отслеживать и учитывать все сообщения. Приношу свои извинения.

Ответ №1:

Параметры работают, как ожидалось. Смотрите комментарий.