技术解析

spring kafka 使用的一个问题
0
2021-06-02 14:14:14
idczone

spring kafka listener 设置手动 ACK,测试没有 ACK,本以为会一直重复收到那条没有 ACK 的消息。 实际却没有,但是可以国外服务器收到新的消息,重启以后 也没有收到就消息。 用./kafka-consumer-groups.sh --bootstrap-server kafka-cluster:9092 --describe --group xxxx 查看,的确没有提交偏移量,lag 越来越大。这是为什么?


是本因为本地也有存一个 offset,对吗?那我应该怎么测试?

没有回复 ack 服务端不知道已经消费了,默认是不会消费失败重试的,需要配置 SeekToCurrentErrorHandler 。

没提交 offset 的话,当前的消费者是会继续向下消费的,重新初始化消费者就可以收到了

1. client 在内存里也维护一个 offset,失败了没有 ACK, 还是会继续消费的,除非自己主动 seek 到出错的 offset,类似 SeekToCurrentErrorHandler 。
2. 重新启动了会继续从服务端的 offset 开始消费,我本地是没有从服务端的 offset 开始消费,是因为我本地的数据被删除,我的 offset 对应的是不存在,那么就按照 auto.offset.reset = latest 继续消费,所以我又遇到重启以后没有收到消息的。

如果 1~4 失败,5 成功了,那么 1~4 就不会重新消费了。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服