Kafka 重启消费者后,从分区的哪里开始重新消费(队列头?队列尾?上一次消费位置?),auto.offset.reset

这篇文章不错,先看这篇https://blog.csdn.net/lishuangzhe7047/article/details/74530417

看文章时注意一些关系:

è¿éåå¾çæè¿°

 

CURRENT-OFFSET这个表示消费者消费了数据之后提交的offset,即消费者消费了的数据的偏移量。如果为unknown,则表示消费者未提交过offset。

LOG-END-OFFSET这个应该表示的是该分区的HW。

LAG表示延迟滞后,也就是生产者已经写到kafka集群了,然后有还没有被消费的数量,是logSize-currentOffset,logsize指的是消息总数。

 

总结一下:

1、如果CURRENT-OFFSET不是为unknown(消费者以前消费过数据,提交过offset),重启消费者时earliest、latest、none都是会从CURRENT-OFFSET一直消费到LOG-END-OFFSET。也就是不会更新offset。

2、如果CURRENT-OFFSET为unknown,重启消费者时earliest、latest、none才会展现出他们各自的不同:

(1)earliest ,会从该分区当前最开始的offset消息开始消费(即从头消费),如果最开始的消息offset是0,那么消费者的offset就会被更新为0.

(2)latest,只消费当前消费者启动完成后生产者新生产的数据。旧数据不会再消费。offset被重置为分区的HW。

(3)none,启动消费者时,该消费者所消费的主题的分区没有被消费过,就会抛异常。(一般新建主题或者用新的消费者组是使用这个就会抛异常。。宕机重启的话,使用这个就没问题。。这个的作用是什么?我猜测应该是用于在重启消费者时检查该消费者所消费的主题以及所属的消费者组的名称是否写错了,导致该消费者没有消费原来主题分区)

在java api中设置auto.offset.reset值(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG)可以指定。

 

看了这篇文章之后基本明白意思了,但是有个疑问:

kafka数据不是会过期删除么,如果消费者宕机期间有数据因为过期被删除了,然后已提交的offset属于这被删除的数,请问这种算是什么情况?