前言:
通常我们消费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会从距离现在最近的位置消费吗?
不会,只要不更改消费组,只会从上次消费结束的地方继续消费标签:reset,消费,group,auto,kafka,offset From: https://www.cnblogs.com/Leo_wl/p/17007293.html