kafka消费者提交偏移量的方式对比同步、自动、异步、组合提交等、基本代码实现、以及他们导致的问题

本文详细介绍了Kafka消费者如何通过自动提交、手动sync/async提交来管理消息消费偏移量,包括重复消费与丢失消费的图解,以及在不同场景下的组合使用技巧,重点讲解特殊提交方法和避免消息重复的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

1 基本概念

2 提交方式

2.0 重复消费和丢失消费图解

2.1 自动提交

2.2 手动提交(同步提交)commitsync

2.4 异步提交commitAsync

2.3 同步和异步组合提交commitAsync()和 commitsync()

2.4 特殊提交、未消费完一个批次消息时提交偏移量


注:基本代码和信息来自享学课堂,自学略有修改

1 基本概念

  • 提交:消费者消费完消息之后,更新自己消费那个消息的操作
  • _consumer_offset:消费者消费完消息之后,会往_consumer_offset主题发送消息,_consumer_offset保存每个分区的偏移量
  • 分区再均衡:消费者的数量发生变化,或者主题分区数量发生变化,会修改消费者对应的分区关系,叫做分区再均衡:保证kafka高可用和伸缩性;缺点:在均衡期间,消费者无法读取消息,群组短时间不可用
 

2 提交方式

2.0 重复消费和丢失消费图解

重复消费图解:

丢失消费图解:

2.1 自动提交

自动提交是最贱的提交偏移量方式, 消费者会自动把从 poll() 方法接收到的 最大 偏移量提交上去。
参数:
  • enable.auto.comnit=true:在消费者close()的时候也会自动提交
  • auto.commit.interval.ms=默认5s,没过5秒就会提交偏移量,但是在4秒发生了分区在均衡,偏移量还没来得及提交,他们这四秒的消息就会被重复消费
问题:
 
自动提交虽然方便 , 但是很明显是一种基于时间提交的方式 , 不过并没有为我们留有余地来避免重复处理消息。

2.2 手动提交(同步提交)commitsync

参数:

auto.commit. offset = false:使用commitsync()提交poll()返回最新偏移量

注意:
  1. 处理完业务之后,一定要手动调用commitsync()
  2. 如果发生了在均衡,由于当前commitsync偏移量还未提交,所以消息会被重复消费
  3. commitsync会阻塞直到提交成功
 
 
代码示例:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值