Fork me on GitHub
kafka的 groupid 与 auto.offset.reset

前言:

通常我们消费kafka数据的时候都会设置两个参数:

Properties props = new Properties();
props.put("group.id", groupId);
props.put("auto.offset.reset", autoOffset);
  • kafka-0.10.1.X版本之前: auto.offset.reset 的值为 smallest 和 largest.(offest保存在zk中)
  • kafka-0.10.1.X版本之后: auto.offset.reset 的值更改为:earliest, latest 和 none (offest保存在kafka的一个特殊的topic名为:__consumer_offsets里面)

参数解读:

auto.offset.reset: 可理解为kafka consumer读取数据的策略,本地用的kafka版本为0.10,因此该参数可填earliest | latest | none。

  • earliest: 当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费
  • latest: 当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据
  • none: topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常

应用:

场景一:

Kafka上在实时被灌入数据,但kafka上已经积累了两天的数据,如何从最新的offset开始消费?(最新指相对于当前系统时间最新)

1.将group.id换成新的名字(相当于加入新的消费组)
2.网上文章写还要设置 properties.setProperty("auto.offset.reset", "latest”)
实验发现即使不设置这个,只要group.id是全新的,就会从最新的的offset开始消费

场景二:

kafka在实时在灌入数据,kafka上已经积累了两天的数据,如何从两天前最开始的位置消费?

1.将group.id换成新的名字
2.properties.setProperty("auto.offset.reset", "earliest”)

场景三:

不更改group.id,只是添加了properties.setProperty("auto.offset.reset", "earliest”),consumer会从两天前最开始的位置消费吗?

不会,只要不更改消费组,只会从上次消费结束的地方继续消费

场景四:

不更改group.id,只是添加了properties.setProperty("auto.offset.reset", "latest”),consumer会从距离现在最近的位置消费吗?

不会,只要不更改消费组,只会从上次消费结束的地方继续消费
posted on 2022-12-27 07:42  HackerVirus  阅读(135)  评论(0编辑  收藏  举报