kafka消费者如何才能从头开始消费某个topic的全量

 消费者要从头开始消费某个topic的全量数据,需要满足2个条件(spring-kafka):

 

(1)使用一个全新的"group.id"(就是之前没有被任何消费者使用过); 
 
(2)指定"auto.offset.reset"参数的值为earliest; 

对应的spring-kafka消费者客户端配置参数为:

 

<!-- 指定消费组名 --> 
<entry key="group.id" value="fg11"/> 
<!-- 从何处开始消费,latest 表示消费最新消息,earliest 表示从头开始消费,none表示抛出异常,默认latest --> 
<entry key="auto.offset.reset" value="earliest"/> 

注意:从kafka-0.9版本及以后,kafka的消费者组和offset信息就不存zookeeper了,而是存到broker服务器上,所以,如果你为某个消费者指定了一个消费者组名称(group.id),那么,一旦这个消费者启动,这个消费者组名和它要消费的那个topic的offset信息就会被记录在broker服务器上。

比如我们为消费者A指定了消费者组(group.id)为fg11,那么可以使用如下命令查看消费者组的消费情况:

 

bin/kafka-consumer-groups.sh --bootstrap-server 172.17.6.10:9092 --describe --group fg11

显示结果如下:

 
TOPIC   PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG  CONSUMER-ID                                      HOST              CLIENT-ID  
friend  0          6               6               0    consumer-1-08c856a3-ae39-4f73-a2da-4de1795c6ad4  /192.168.207.127  consumer-1 
friend  1          2               2               0    consumer-1-08c856a3-ae39-4f73-a2da-4de1795c6ad4  /192.168.207.127  consumer-1 
friend  2          4               4               0    consumer-1-08c856a3-ae39-4f73-a2da-4de1795c6ad4  /192.168.207.127  consumer-1 

其实friend这个topic共有3个分区,消息总数为12条,其实在消费者A启动之前,这12条消息已经被其他某个组的消费者消费过了。而我们虽然为消费者A指定了一个全新的group.id为fg11,但是如果我们在启动消费者A之前,指定的"auto.offset.reset"参数的值是latest而不是earliest的话(就算你停止消费者,然后改为earliest也是没有用的),启动之后它将不会消费以前的消息,除非friend这个topic的分区中有了新的消息它才会消费。

 

所以一定要在消费者启动之前就保证group.id是全新的,而且要指定earliest而不是latest。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuyuinsdu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值