如果auto.offset.reset=最早,但主题没有消息,将设置什么使用者偏移量



我有Kafka服务器版本2.4,并设置了log.reduration.housh=168(这样主题中的消息将在7天后被删除(和auto.foffset.reset=early。由于我使用的是Kafka 2.4版本,因此默认值offsets.retention.minutes=10080(因为我没有在应用程序中设置此属性(。

我的主题数据是:1,2,3,4,5,6,7,8,9,10

关闭耗电设备前的当前耗电设备偏移:10

结束偏移:10

消费者最后承诺的抵消:10

假设我的消费者在过去7天内没有运行,我在第8天启动了该消费者。因此,我最后一次由消费者提交的偏移量将过期(由于offsets.retention.minutes=10080属性(,主题消息也将被删除(由于log.reention.hours=168的属性(。

所以想知道auto.foffset=early属性现在将设置什么消费者偏移量吗?

尽管Kafka主题中没有可用的数据,但您的代理仍然知道"下一个";该分区内的偏移量。在您的情况下,此主题的第一个和最后一个偏移量是10,而它不包含任何数据。

因此,已经提交偏移量10的使用者将在再次启动时尝试读取11,而与使用者配置auto.offset.reset无关。

当你的主题有偏移量时,你的例子会变得更加有趣,比如说,直到15,而消费者在提交偏移量10后被关闭。现在,假设由于保留策略,所有偏移都已从主题中删除。如果您随后仅启动消费者,则消费者配置auto.offset.reset将如文档中所述生效:

"当Kafka中没有初始偏移时,或者如果当前偏移在服务器上不再存在(例如,因为该数据已被删除(,该怎么办;

只要卡夫卡主题是空的,就没有偏移量"设置";为消费者。消费者只是试图找到下一个可用的偏移量,无论是基于

  • 最后提交的偏移量,或者
  • 如果最后提交的偏移量不再存在,则通过auto.offset.reset给出的配置

另请注意:即使消息似乎已被保留策略清除,您仍可能在主题中看到一些数据,因为即使在保留时间/大小之后,数据仍保留在Kafka主题中

一旦从日志中删除使用者组,auto.offset.reset将占据优先权,使用者将从头开始消费数据。

My Topic data is : 1,2,3,4,5,6,7,8,9,10

如果主题具有上述数据,则消费者将从头开始,并且所有1到10条记录都将被消费

My Topic data is : 11,12,13,14,15,16,17,18,19,20

在这种情况下,如果由于保留而清除了旧数据,消费者将把偏移量重置为最早(当时可用的最早偏移量(,并从那里开始消费,例如,在这种情况中,它将消耗11到20的所有数据(因为清除了1到10(

最新更新