RocketMQ不解决消息重复问题,RocketMQ不解决消息重复问题,RocketMQ不解决消息重复问题,重要的事情说三遍。
基本上说我很讨厌有人问这个问题,问这个问题首先你对消息的生命周期缺乏理解,其次RocketMQ的定位不是很清楚,RocketMQ单机写入TPS单实例约7万条/秒,单机部署3个Broker,可以跑到最高12万条/秒,消息大小10个字节。换句话说单机RocketMQ的每分钟处理的请求是12W*60=720W,每小时处理的请求是720W*60=44400W。在这么大的信息量面前任何额外的要求不觉得都有点吹毛求疵。(所以如果有人坚持去要求你从RocketMQ的角度解决消息重复消费问题,你可以开始撕逼模式了。)

然而消息重复的问题确实存在,我们该如何解决呢。
       消息的生命周期包括分为消息产生源,消息传播(消息发送,消息投递,消息消费),消息持久化这几个环节。在使用RocketMQ过程中,RocketMQ主要负责消息发送,消息的传递,消息消费的问题,然而RocketMQ解决不了消息重复消费的问题,实际上RocketMQ还有消息重复发送和消息重复投递的问题。
1.1 生产者重发导致相同
        由于网络闪断或者客户端宕机,导致服务端对客户端应答失败。此时如果生产者再次发送消息,消费者就会出现内容相同并且MessageID也相同的消息。
1.2服务端重推导致相同
        当客户端给服务端反馈应答的时候网络闪断或者客户端消费完成反馈前宕机,服务端会在网络恢复后重发一次。
上面两条是RocketMQ本身存在的MessageID相同的问题,之前也有人说通过业务key来保证消息是不重复的。
1.3消费者解决不了重复消费
       RocketMQ是分布式环境,消息系统自身解决消费重复问题,需要消费者端进行大量的确认。一方面这种确认会导致大量消息阻塞,另一方面分布式环节下需要网络确认,消息在网络传递过程中具有不可靠性。

事实证明消息的传递具有不可靠性;网络不可靠性,只要通过网络传输的消息都具有网络不可靠性;或者说系统受到黑客的恶意篡改,导致的消息完全一致等等。只要消息经过传递,希望在传递层保证消息都无法100%保证消息的可靠性。传递过程无法确保消息不重复,那么消息源也就不需要关注了,因为即使消息源确保唯一,传递过程中还是会产生重复消息。

消息流从五个环节从消息源,消息发送,消息传递,消息消费都无法保证消息不重复,那么我们能做的只有在消息持久化环节保证消息不重复。其实所有的保证消息不重复的策略都需要一个消息持久化的位置供消息重复验证,然而不巧的是除非和消息最本源的位置做验证,其他环节的验证都具有不可靠性。
消息持久层做消息唯一性的策略
       1.持久化过程中业务唯一标识验证,每个消息具有业务唯一标识,在消息最终持久化之前通过验证唯一性标识保证消息的唯一性。消息持久化位置如果出现同样的消息,系统就不做处理,期间无任何传递过程,保证消息的唯一性。
       2.使用过程中业务唯一标识验证,使用过程中如果出现同样的消息,系统进行相应的异常处理。

备注:例如mysql去重表

总结:
消息的生命周期中只有在消息产生源和消息持久源才是具有意义的,在过程中不必太苛求。

RocketMQ常见问题-消息重复消费和消息重复的问题相关推荐

  1. 一文理清RocketMQ顺序消费、重复消费、消息丢失问题

    前言 在使用消息队列时不可避免的会遇到顺序消费.重复消费.消息丢失三个问题.在一次面试字节的时候,面试官问到如何保证顺序消费,当时回答不太准确,特意此文回顾如何解决顺序消费.重复消费.消息丢失三个问题 ...

  2. rocketmq 重复消费_消息队列 RocketMQ

    引言 本文整理了RocketMQ的相关知识,方便以后查阅. 功能介绍 简单来说,消息队列就是基础数据结构课程里"先进先出"的一种数据结构,但是如果要消除单点故障,保证消息传输的可靠 ...

  3. Kafka Consumer位移(Offset)提交——解决Consumer重复消费和消息丢失问题

    本文目录 1.Consumer 位移(offset) 1.2 位移(offset)的作用 2. 位移(offset)提交导致的问题 2.1 消息丢失 2.2 消息重复消费 3 Consumer位移提交 ...

  4. RocketMQ消息重复消费场景及解决办法

    消息重复消费是各个MQ都会发生的常见问题之一,在一些比较敏感的场景下,重复消费会造成比较严重的后果,比如重复扣款等. 那么在什么情况下会发生RocketMQ的消息重复消费呢? 当系统的调用链路比较长的 ...

  5. 详解,最新整理,RabbitMQ,RocketMQ,Kafka 事务性,消息丢失,消息顺序性和消息重复发送的处理策略

    消息队列常见问题处理 分布式事务 什么是分布式事务 我们的服务器从单机发展到拥有多台机器的分布式系统,各个系统之前需要借助于网络进行通信,原有单机中相对可靠的方法调用以及进程间通信方式已经没有办法使用 ...

  6. RabbitMQ,RocketMQ,Kafka 事务性,消息丢失,消息顺序性和消息重复发送的处理策略

    消息队列常见问题处理 分布式事务 什么是分布式事务 我们的服务器从单机发展到拥有多台机器的分布式系统,各个系统之前需要借助于网络进行通信,原有单机中相对可靠的方法调用以及进程间通信方式已经没有办法使用 ...

  7. 如何保证消息不被重复消费啊(如何保证消息消费时的幂等性)?

    1.面试题 如何保证消息不被重复消费啊(如何保证消息消费时的幂等性)? 2.面试官心里分析 其实这个很常见的一个问题,这俩问题基本可以连起来问.既然是消费消息,那肯定要考虑考虑会不会重复消费?能不能避 ...

  8. 消息队列面试 - 如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?

    消息队列面试 - 如何保证消息不被重复消费? 面试题 如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性? 面试官心理分析 其实这是很常见的一个问题,这俩问题基本可以连起来问.既然是消费消息, ...

  9. 阿里面试题剖析,如何保证消息不被重复消费?

    2019独角兽企业重金招聘Python工程师标准>>> 面试题 如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性? 面试官心理分析 其实这是很常见的一个问题,这俩问题基本可 ...

最新文章

  1. python之函数三装饰器
  2. Swift进阶学习笔记
  3. 利用jvisualvm分析JVM,进行性能调优
  4. 在一个数组中找出和为目标值的那 两个 整数,并返回他们的数组下标python代码(Leetcode1)
  5. java 内存模型 ——学习笔记
  6. linux epoll 开发指南-【ffrpc源码解析】
  7. BugkuCTF-Reverse题SafeBox(NJCTF)
  8. git+pylint实现python提交代码格式校验
  9. Mac OSX 命令行知识
  10. Nacos集群部署说明
  11. C语言文件系统模拟器
  12. AMT咨询成为中国首获风投的管理咨询服务机构
  13. 【区块链】区块链是什么?
  14. GBC代理“花生漫画PEANUTS”,遭遇侵权账户冻结应该怎么处理?
  15. SOPC设计02——硬件系统开发流程
  16. JS(javascript) 将网站加入收藏夹
  17. S7-200SMART学习笔记(含学习视频网盘资源)
  18. Qt Mediaplayer videoplayer 例子工程 Media Player Example 应用过程中出现的问题(一)视频无法播放
  19. 《数据清洗》——数据转换课后作业
  20. 拼多多拼团小程序开发

热门文章

  1. 南卡VS明基护眼台灯对比评测,2022买哪款护眼灯比较好?
  2. ArcGIS中对Feature的操作
  3. [可视化] 点云可视化工具open3d的使用
  4. android游戏出现闪退问题怎么解决方法,游戏出现频繁闪退解决方法参考 游戏频繁闪退怎么办...
  5. 航班管理系统(C语言)
  6. 百家讲坛-《人类的起源》 吴新智
  7. w ndows7旗舰版怎么重装系统,windows7旗舰版安装包下载到手机的操作方法步骤教程 - 系统家园...
  8. 表单验证使用注解@Valid
  9. 51使用LCD1602液晶显示(复习总结)
  10. 2018互联网大厂秋招编程通关(二)