kafka消费者消息不提交确认是如何拉取新的消息的?

—— 发表于: 2021-11-15   最后更新时间: 2021-11-15 14:28:24   1,550 游览

比如当前三条消息A B C

consumerOffset=0 lag=3 消费者1 分区A

消费者1消费消息A 并且提交确认后,数据变化如下

consumerOffset=1 lag=2 消费者1 分区A

消费者1消费消息B,但不提交确认,此处出现疑问了

1、数据变化还是consumerOffset=1 lag=2 消费者1 分区A吗

2、消费者1怎么保存自身当前消费的offset的,此当前消费的offset应该是和consumerOffset的值不一致的,然后会继续拉取消息C,怎么获取到消息C的offset去拉取的

发表于 2021-11-15
添加评论

1、你没有提交offset,所以消费者1消费的位置还是consumerOffset=1 lag=2,当你重启kafka消费者,也会从这个位置开始继续消费。

2、kafka是批量拉取消息的,一次拉取约2000条(里面包含A、B、C...),所以,当你消费掉了A,不管提不提交offset,也会将整个批次的消息消费完的。

—— -> 半兽人 2年前

如果我是有1000条消息,批量拉取是500条,然后第一批500条处理完了,下一次拉取的offset怎么计算的,怎么去拉取?

半兽人 -> —— 2年前

根据处理完后的offset下标,顺着往后。

—— -> 半兽人 2年前

offset一般是从消费者刚启动或者发生重平衡后读取作为拉取第一批数据的开始下标,然后第二批拉取会依赖第一批消息最后一个offset作为开始下标去拉取

那可以这么理解么?

半兽人 -> —— 2年前

可以。
更多概念可参考:kafka消费者

—— -> 半兽人 2年前

好的 谢谢

你的答案

查看kafka相关的其他问题或提一个您自己的问题