作者:一条路上的咸鱼
链接:https://www.jianshu.com/p/07b2169bef49

1.大量消息在mq里积压了几个小时了还没解决

场景:几千万条数据在MQ里积压了七八个小时,从下午4点多,积压到了晚上很晚,10点多,11点多。线上故障了,这个时候要不然就是修复consumer的问题,让他恢复消费速度,然后傻傻的等待几个小时消费完毕。这个肯定不行。一个消费者一秒是1000条,一秒3个消费者是3000条,一分钟是18万条,1000多万条。
所以如果你积压了几百万到上千万的数据,即使消费者恢复了,也需要大概1小时的时间才能恢复过来。
解决方案:”
这种时候只能操作临时扩容,以更快的速度去消费数据了。具体操作步骤和思路如下:
①先修复consumer的问题,确保其恢复消费速度,然后将现有consumer都停掉。

②临时建立好原先10倍或者20倍的queue数量(新建一个topic,partition是原来的10倍)。

③然后写一个临时分发消息的consumer程序,这个程序部署上去消费积压的消息,消费之后不做耗时处理,直接均匀轮询写入临时建好分10数量的queue里面。

④紧接着征用10倍的机器来部署consumer,每一批consumer消费一个临时queue的消息。

⑤这种做法相当于临时将queue资源和consumer资源扩大10倍,以正常速度的10倍来消费消息。

⑥等快速消费完了之后,恢复原来的部署架构,重新用原来的consumer机器来消费消息。

2.消息设置了过期时间,过期就丢了怎么办

假设你用的是rabbitmq,rabbitmq是可以设置过期时间的,就是TTL,如果消息在queue中积压超过一定的时间就会被rabbitmq给清理掉,这个数据就没了。那这就是第二个坑了。这就不是说数据会大量积压在mq里,而是大量的数据会直接搞丢。
解决方案:
这种情况下,实际上没有什么消息挤压,而是丢了大量的消息。所以第一种增加consumer肯定不适用。
这种情况可以采取 “批量重导” 的方案来进行解决。
在流量低峰期(比如夜深人静时),写一个程序,手动去查询丢失的那部分数据,然后将消息重新发送到mq里面,把丢失的数据重新补回来。

3.积压消息长时间没有处理,mq放不下怎么办

如果走的方式是消息积压在mq里,那么如果你很长时间都没处理掉,此时导致mq都快写满了,咋办?这个还有别的办法吗?
解决方案:
这个就没有办法了,肯定是第一方案执行太慢,这种时候只好采用 “丢弃+批量重导” 的方式来解决了。

首先,临时写个程序,连接到mq里面消费数据,收到消息之后直接将其丢弃,快速消费掉积压的消息,降低MQ的压力,然后走第二种方案,在晚上夜深人静时去手动查询重导丢失的这部分数据。

消息积压在消息队列里怎么办相关推荐

  1. RocketMq消息积压、消息重复、消息完整、消息顺序处理方案

    消息积压 当生产端的生产效率大于消费端的消费效率,就会造成消息处理不完的情况. 排查方式:RocketMQ 监控告警:生产环境如何快速通过监控预警发现堆积.收发失败等问题?_rocketmq监控指标_ ...

  2. 消息队列、RabbitMQ原理、消息队列保证幂等性,消息丢失,消息顺序性,以及处理消息队列消息积压问题

    消息队列 消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已 常见的消息队列 RabbitMq ActiveM ...

  3. 完了!生产事故!几百万消息在消息队列里积压了几个小时!

    分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!点击浏览教程 一.面试题 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几 ...

  4. 消息队列的消息积压解决办法

    1.1 概述 其实本质针对的场景,就是说可能你的消费端出了问题,不消费了:或者消费的速度极其慢.接着就坑爹了,就可能出现以下三大问题场景: 1.可能你的消息队列集群的磁盘都快写满了,都没人消费,这个时 ...

  5. 消息队列中:消息可靠性、重复消息、消息积压、利用消息实现分布式事务

    点击下方"Java编程鸭"关注并标星 更多精彩 第一时间直达 一.如何确保消息不丢失? 1.检测消息丢失的方法 可以利用消息队列的有序性来验证是否有消息丢失.在Producer端给 ...

  6. 消息队列(基础篇)- 7 消息积压了该如何处理

    我们都知道,消息积压的直接原因,一定是系统中的某个部分出现了性能问题,来不及处理上游发送的消息,才会导致消息积压. 所以,我们先来分析下,在使用消息队列时,如何来优化代码的性能,避免出现消息积压.然后 ...

  7. 消息队列:消息积压如何处理?

    目录 一.前言 二.优化性能来避免消息积压 1. 发送端性能优化 2. 消费端性能优化 三.消息积压了该如何处理? 四.小结 一.前言 在使用消息队列遇到的问题中,消息积压这个问题,应该是最常遇到的问 ...

  8. RTX5 | 消息队列03 - 获取消息队列里消息的数量,并一次性提取出来

    文章目录 一.前言 二.实验目的 三.API 3.1.osMessageQueueGetCount 四.代码 4.1.main.h 4.2.main.c 五.Event Recorder调试 5.1. ...

  9. 如何保证消息队列里的数据顺序执行?

    使用MQ的时候,经常会有按顺序消费的需求,比如大数据团队为了做数据分析,会把数据库里数据同步到其他系统做一些数据统计分析.同步MySQL的时候,为了保证数据同步的实时性,会在中间加一个MQ,多个线程来 ...

最新文章

  1. 多机多卡训练基本原理
  2. MySQL Binlog解析
  3. linux运维基础2
  4. oracle setpage,Oracle Set命令的应用
  5. 页面初始加载的是默认刷新一次(f5)
  6. 003Java语言环境搭建
  7. Java——集合(输入一串字符串,统计字符串中每个字符出现的次数)
  8. 配置独立于系统的PYTHON环境
  9. 【OpenCV 例程200篇】04. 用 matplotlib 显示图像(plt.imshow)
  10. 我的世界linux服务器乱码,我的世界服务器控制台使用上箭头乱码解决办法
  11. Android 中文API (69) —— BluetoothAdapter[蓝牙]
  12. SQL Server 2005安装时提示“服务无法启动”
  13. matlab查表svpwm,SVPWM的查表生成方式代码
  14. 关于GPS坐标系和地图定位偏差
  15. 深圳率先立法:支持L3自动驾驶上路,凡公开道路皆可行
  16. 7z文件linux怎么解压,Ubuntu 12.04下解压7z文件
  17. Win10 触摸屏 快捷键操作
  18. 双创项目_宫颈癌智能风险检测(4)
  19. 百度、高德、谷歌、火星、wgs84(2000)地图坐标相互转换的JS实现
  20. c语言炉石传说测试数据库,炉石传说:王师傅微博分享算法入门题 网友:快把C语言播完吧!...

热门文章

  1. java将0到9随机输出_生成0到9之间的随机整数
  2. 青少年python编程课_青少年之Python编程课程安排第一季
  3. Python绘制桑基图
  4. Linux运维工程师可是很吃香的
  5. stm32和51单片机的区别,先学51还是先学stm32?
  6. poj1273(最大网络流问题模版)
  7. 欧拉筛 筛法求素数 及其例题 时间复杂度O(n)
  8. 最小费用最大流 ---- 2017icpc青岛现场赛 K Our Journey of Xian Ends (拆点控制原图点度 + 中间必经过的点设置成源点 + 起点设成汇点)
  9. nginx文件服务器html美化,关于nginx:Nginx浏览目录配置及美化
  10. django mysql orm教程_带你了解Django ORM操作(基础篇)