消息幂等性消息幂等了解吗?
幂等性其实是一个数学概念,具体是这样定义的:某一元运算为幂等时,该运算作用在任一元素两次后会和一次的结果相同。如:1+1=2,无论执行多少次1+1最后的结果都是2,那么我们说加法运算就是幂等运算。
而这样一个概念衍生到计算机中就产生了幂等性的概念,即:接口或者资源在重复调用的情况下,对系统产生的影响是一样的。在消息队列中的幂等性主要包括生产者幂等性和消费者幂等性两个方面。
生产者幂等性,无论多少次消费消息队列中的消息,消费的结果都是一致的。简单来说就是:消费者幂等性保证消息不会被重复消费。生产者幂等性,即在网络情况波动等情况下是,生产者不会将冗余的消息推送给MQ,即消息不会被重复推送。
可以通过以下几种方法保证Consumer的消息幂等性:
- Consumer手动确认:可以为消息声称一个全局的唯一标志id,当消费者消费消息的时候先手动从本地的唯一id来判断消息是否已经被消费过了来避免重复消费的问题
- 消息去重:这个方案需要与具体的业务相结合进行讨论,例如:如果你的消费者就是将消息写入到MySQL数据库中,那么可以先根据“数据库主键”或者“布隆过滤器”来进行查询,以保证消息最终的幂等性。当需要确保消息的幂等性时,可以根据不同的场景采取相应的策略。
Producer消息幂等性保证:
- 配置:在最新的Kafka中 通过 Producer 配置 enable.idempotence 就可以实现消息的幂等性,它会确保相同的消息在发送时只会被写入一次,即使生产者发生重试或失败。当启用幂等性时,Producer 会自动为每个消息分配一个序列号,并在 Broker 上维护一个日志,记录每个 Producer 发送的消息序列号,以确保不会写入重复消息。
-
免责声明
- 本文发布的信息,最终解释权归作者所有,如有疑问或需要进一步了解,请直接与作者联系。
- 本文部分信息来源于网络,其版权归原作者所有,本文使用该信息仅出于分享给求职者,无任何商业用途,如有侵权,请联系作者删除。
- 本文发布的信息旨在为应届生和社会人士提供了解相关企业招聘信息的便利,不涉及任何机密信息,且所有信息均为网络公开获取。 本人亦无任何渠道可以了解任何机密信息, 如果您认为某些内容存在侵权、泄密问题,请及时联系作者删除。
赏
使用支付宝打赏
使用微信打赏
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
更多央国企信息、面试辅导、简历修改等,请关注知识星球:[成都央国企指南]