Kafka 如何保证消息不重复消费

文章目录

    • kafka出现消息重复消费的原因:
    • 解决方案

虽然说的是kafka,但是其实其他消息中间件也有这个问题。可以一起参考下面的方案。

kafka出现消息重复消费的原因:

1、服务端侧已经消费的数据没有成功提交 offset(根本原因)。
2、Kafka 侧 由于服务端处理业务时间长或者网络链接等等原因让 Kafka 认为服务假死,触发了分区 rebalance。

解决方案

1、消费消息服务做幂等校验,比如 Redis 的set、MySQL 的主键等天然的幂等功能。这种方法最有效。

2、将 enable.auto.commit 参数设置为 false,关闭自动提交,开发者在代码中手动提交 offset。那么这里会有个问题:什么时候提交offset合适?
处理完消息再提交:依旧有消息重复消费的风险,和自动提交一样
拉取到消息即提交:会有消息丢失的风险。允许消息延时的场景,一般会采用这种方式。然后,通过定时任务在业务不繁忙(比如凌晨)的时候做数据兜底。

你可能感兴趣的:(kafka,kafka,kafka保障消息不重复消费)