比如当前三条消息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去拉取的
1、你没有提交offset,所以消费者1消费的位置还是
consumerOffset=1 lag=2
,当你重启kafka消费者,也会从这个位置开始继续消费。2、kafka是批量拉取消息的,一次拉取约2000条(里面包含A、B、C...),所以,当你消费掉了A,不管提不提交offset,也会将整个批次的消息消费完的。
如果我是有1000条消息,批量拉取是500条,然后第一批500条处理完了,下一次拉取的offset怎么计算的,怎么去拉取?
根据处理完后的offset下标,顺着往后。
offset一般是从消费者刚启动或者发生重平衡后读取作为拉取第一批数据的开始下标,然后第二批拉取会依赖第一批消息最后一个offset作为开始下标去拉取
那可以这么理解么?
可以。
更多概念可参考:kafka消费者
好的 谢谢
你的答案