Spring Cloud Stream Kafka Binder autoCommitOnError = false获得意外行为

问题描述 投票:1回答:1

我使用的是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消费者正在为它处理的每条消息调用一个Web服务,如果Web服务不可用,那么我希望消费者在进入下一条消息之前尝试处理该消息3次。因此,对于我的测试,我禁用了Web服务,因此无法正确处理任何消息。从日志中我可以看到这种情况正在发生。

过了一会儿我停下来然后重新启动了Kafka消费者(webservice仍然被禁用)。我期待在Kafka消费者重新启动后,它会尝试处理第一次未成功处理的消息。在重新启动Kafka Consumer之后,我从日志(我打印出每个消息及其字段)中看不到这种情况。我认为分区可能会影响某些东西,但我检查了日志,并且所有20个分区都分配给了这个单一的消费者。

我错过了一处房产吗?我认为第二次重启消费者时的预期行为是Kafka经纪人会将未成功处理的记录再次传递给消费者。

谢谢

apache-kafka stream spring-cloud-stream
1个回答
0
投票

参数按预期工作。见评论。

© www.soinside.com 2019 - 2024. All rights reserved.