kafka读书笔记-消费者-指定位移消费seek与分区再均衡

本文介绍了Kafka消费者在没有初始消费位移时如何通过auto.offset.reset参数设置消费起点,以及如何使用seek()方法手动重置消费位移。在讨论分区再均衡时,阐述了消费者在再均衡过程中的状态保护,如何利用ConsumerRebalanceListener避免重复消费,并通过seek方法确保消费的连续性。
摘要由CSDN通过智能技术生成

消费者消费消息时会根据之前提交的消费位移offset去kafka拉取offset之后的消息进行消费。但是一些情况下消费者开始消费时会没有消费位移,比如一个新的消费组建立的时候,或者消费组内的一个新的消费者订阅了一个新的主题,或者__consumer_offsets主题中关于这个消费组的位移信息已经过期而被删除的时候。这时消费者开始消费的消费位移就由客户端参数auto.offset.reset来决定,这个参数默认值为"latest",表示从分区末尾开始消费消息。也可以改为"earliest",表示从起始处来消费消息。也可以配置为“none”,表示找不到消费位移时直接抛出NoOffsetForPartitionException异常。

除了上述的位移重置的配置参数,消费者也可以通过seek()方法手动重置位移,此处需要注意的一个点在于consumer在通过poll方法拉取消息时,poll方法会通过调用fetcher.fetchedRecords()方法去获取消费者订阅的分区,只有这个方法返回时才能通过以下方式去获取topicPartition并且通过seek()方法重置位移。

Set<TopicPartition> topicPartition= consumer.assignment();
topicPartition.forEach(topicPartition1 -> consumer.seek(topicPartition1,offset));

poll方法带有Duration参数,可能会存在到达指定时间后,poll()方法直接返回,内部的分区分配逻辑还未实施,那么此时获取到的consumer.assignment()就是一个空集合,所以调用时需注意进行循环判断调用poll获取订阅的分区后再去调用seek方法重置位移。

消费者内的seek方法有如下几种:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值