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 就不会重新消费了。