【kafka原理】消费者提交已消费的偏移量

本文探讨了在Kafka中,如果消费者在消费消息成功但未提交offset前服务挂掉可能导致的重复消费问题。文章介绍了手动提交offset的两种方式:同步提交会阻塞线程直至提交成功,而异步提交则不会,但可能丢失提交请求。通过代码示例展示了同步和异步提交的使用,并分享了面试经验和大厂面试中可能遇到的问题。
摘要由CSDN通过智能技术生成

}

假如Consumer在获取了消息消费成功但是在提交之前服务挂掉了

如果发生这种情况会有什么影响? 答: 重复消费

消费者消费之后 offset并没有及时更新过去,那么在下次启动或者同组内其他消费者去消费的时候 取到的数据就是之前的数据;

那么就会出现 重复消费的情况;

所以auto.commit.interval.ms到底设置成多少就很有考究了

手动提交


虽然自动提交 offset 十分简介便利,但由于其是基于时间提交的,开发人员难以把握 offset 提交的时机。因此 Kafka 还提供了手动提交 offset 的 API。

手动提交 offset 的方法有两种:分别是 commitSync(同步提交)commitAsync(异步 提交)。两者的相同点是,都会将本次poll 的一批数据最高的偏移量提交;不同点是, commitSync 阻塞当前线程,一直到提交成功,并且会自动失败重试(由不可控因素导致, 也会出现提交失败);而commitAsync则没有失败重试机制,故有可能提交失败。

同步提交 offset

public static void consumerCommitSync(){

Properties props = new Properties();

props.put(“bootstr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值