消息队列之如何保证消息的幂等性

本文探讨了消息队列中如何确保消息幂等性的重要性,以避免重复消费导致的数据错误。通过举例说明Kafka的offset管理和可能出现的问题,提出了解决方案。保证幂等性的关键在于结合业务场景,例如利用主键查询避免数据库重复插入,利用Redis的set操作实现天然幂等性,或者使用全局唯一ID记录已处理消息。此外,还可以依赖数据库的唯一键约束防止脏数据的产生。
摘要由CSDN通过智能技术生成

1.1 前言

不管是RQ还是Kafka等消息队列,在被消费者消费的时候需要防止的一个问题就是:如何防止消息被重复消费,也是就消息的幂等性。这问题通常不是 MQ 自己保证的,是由我们开发来保证的。挑一个 Kafka 来举个例子,说说怎么重复消费吧。
Kafka 实际上有个 offset 的概念,就是每个消息写进去,都有一个 offset,代表消息的序号,然后 consumer 消费了数据之后,每隔一段时间(定时定期),会把自己消费过的消息的 offset 提交一下,表示“我已经消费过了,下次我要是重启啥的,你就让我继续从上次消费到的 offset 来继续消费吧”。

但是凡事总有意外,比如我们之前生产经常遇到的,就是你有时候重启系统,看你怎么重启了,如果碰到点着急的,直接 kill 进程了,再重启。这会导致 consumer 有些消息处理了,但是没来得及提交 offset,尴尬了。重启之后,少数消息会再次消费一次。

注意:新版的 Ka

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值