返回到文章

采纳

编辑于

kafka关于consumer的auto-offset-reset的earliest 和latest属性到底含义是什么?

kafka

请问关于consumer的auto-offset-reset earliestlatest 到底含义是什么?

去查阅了下官网资料

What to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted):
earliest: automatically reset the offset to the earliest offset
latest: automatically reset the offset to the latest offset

(机翻。。。)

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

  • 最早:将偏移量自动重置为最早的偏移量
  • 最新:自动将偏移量重置为最新偏移量

测试数据截图

当前kafka集群中的数据

有三个分区

screenshot

当前有三个消费组 且都已消费完毕

screenshot

screenshot

关闭消费者服务 当设置为earliest 生产者新增5个数据

screenshot

此时打开消费者查看消费详情

screenshot

发现并没有从头开始消费 而是从当前的offset之后开始消费了5个数据

关闭消费者服务 当设置为latest 继续生产5个数据

screenshot

screenshot

此时打开消费者查看消费详情

screenshot

结论 :当存在offset时 设置为earliest或latest 都是从当前的offset之后开始消费

测试一下新建的消费组 还是新生产5个数据 然后设置为latest时 开启消费服务

创建一个新的消费组 并订阅当前topic
screenshot

当设置为latest时 开启消费服务

screenshot
结果发现并不会消费新的数据 因为创建的5个数据 在新的消费服务启动前就已经创建了 而当前的消费者没有提交过offset 且模式设置为latest 直接设置当前的offset为 3056 (分区0最后一个是3055)和 8529(分区2最后一个是8528)

重新生产5个数据 此时查看到消费者获取到了新的5条数据

screenshot

此时查看当前的集群状态
多了一个c1_4 新增的消费组 并且已经更新到最新的offset
screenshot

新建消费组c1_5 新增5个数据 并设置为earliest时 然后开启消费服务

screenshot

打开消费者服务查看 消费详情

screenshot

发现之前的数据也消费了 id 14996 14998 14999 15000 等
此时查看kafka集群状态
screenshot

多了一个新的消费组c1_5 并且已经到最新的offset

screenshot

结论:

当Kafka中没有初始偏移量或服务器上不再存在当前偏移量时(例如因为该数据已被删除)时设置auto-offset-reset属性:
earliest :会从最早的开始拉取
latest : 会从当前最新的开始拉取 即当前offset 之后的第一个开始拉取

当存在已经提交的offset时 两者都是从最后一次提交记录的 offset开始拉取数据。

记录一下仅供大家参考 ,欢迎大佬指正错误,第一次写不太会排版见谅。。。

入坑kafka几天的萌新,现在才搭建完项目跑起来,发现我这个写的用消费者的springboot默认自带的key分区模式 结果数据分区不平衡 0 1 2 分区 2分区爆满 1分区基本没咋用。。。 想写个自定义的分区策略结果不了解整个加载流程 还在爬坑中。希望大佬多多指教。