消息队列常见问题(二):消息队列产生大量的消息堆积怎么解决?

我是小傅哥 2021-05-18 13:31:03 ⋅ 2893 阅读

上一节列举了生产上消息队列产生大量的消息堆积会有哪些后果,那相对应的解决方法有哪些呢?

1、消息被丢弃情况
如果要实现防止消息过期问题,最好不要设置过期时间!那设置了过期时间导致消息丢失怎么补救呢?
答案:找个月黑风高(访问量低)的夜晚,辛苦一下程序员写个补偿代码喽。

2、磁盘不足情况
大多数的公司系统都是有监控的,我们公司是触发90%的阈值就会报警,这样运维同学就会马上处理了。
磁盘问题有预警,但是最终结果还是需要把堆积的消息进行消费掉。可以在其他机器上创建临时消息队列,重新写一个临时的Consumer 作为消息中转站,单独把积压队列中的消息取出来,放到临时队列里快速疏散积压的消息,让磁盘回复正常水平。

3、快速处理海量积压消息
积压了 100 万条,有 3 个 Consumer,每一个每秒能处理 200 条,3 个 Consumer 每秒一共能处理 600 条。那就需要1个多小时才能处理完,那么这个时间段又会重新积压数据。

还是可以使用临时队列的方式。
新建一个 Topic,设置为 20 个 Partition
Consumer 不再处理业务逻辑了,只负责搬运,把消息放到临时 Topic 中
这 20 个 Partition 可以有 20个 Consumer 了,它们来处理原来的业务逻辑。
这 20 个 Consumer 每秒一共能处理 4000 条了,这样几分钟就可以处理完积压的 100 万条。
这几分钟新来的消息也不会太多,所以很快就可以恢复正常水平,之后,再把整体结构恢复为原来的形式。
总结,消息积压还是比较麻烦的,最好是提前防范,做好硬件和消息系统的健康监控。如果出现消息丢失,就要人工查找丢失的消息,然后补上。在消费不过来的时候,可以考虑使用临时队列作为中转,提升处理能力。

相关链接

全部评论: 0

    我有话说:

    消息队列常见问题(一):生产上消息队列产生大量消息堆积会有什么后果?

    大多数消息堆积原因是Consumer出现了问题,并且没有被运维/开发监控到即使修复问题,导致大量消息都积压在 MQ 中,那么会造成哪些后果呢?1、消息被丢弃例如 RabbitMQ 中一条消息设置

    Springboot项目redisTemplate实现轻量级消息队列

    redisTemplate实现轻量级消息队列,代码奉上

    腾讯自研高吞吐消息队列组件TubeMQ升级为 TubeHub

    TubeMQ简介 TubeMQ 项目始于 2013 年,是腾讯自研高吞吐消息队列组件。项目团队于 2019 年将 TubeMQ 捐赠给 Apache 基金会,成为腾讯首个被 Apache 基金会

    Node&RabbitMQ系列 延迟|死信队列

      前提 目前项目中采用ts+eggjs结合方式,针对定时任务,采用schedule,随着业务增多,觉得缺点啥,可能就是缺消息队列吧。上一篇文章,针对rabbitmq基本语法进行了

    「轻阅读」消息总线(MQ)知多少

    消息总线(Message Queue,MQ),是一种跨进程通信机制,用于在上下游之间传递消息。MQ是一种常见上下游“逻辑解耦+物理解耦”消息通信服务,消息发送上游只需要依赖MQ,逻辑上和物理上

    3分钟学会 React-Native 消息推送【附源码】

    作为一个独立APP应用怎么能没有消息推送呢?

    高并发下分布式事务解决方案-MQ消息事务+最终一致性

    分布式事务分布式事务就是指事务参与者、支持事务服务器、资源服务器以及事务管理器分别位于不同分布式系统不同节点之上

    「转载」蘑菇街消息系统上云实践

    小编又来啦~本周要推荐给大家是一篇跟中间件上云相关技术文章,这里面详细记录了,蘑菇街自研消息系统上云全过程,也是市面上开放出来为数不多企业自研组件上云实践。有相关需求同学可以好好学习下

    Openfire 4.6.2 发布,即时消息传输平台

    Openfire 4.6.2 发布了。Openfire 是一个使用广泛采用即时消息开放协议 XMPP(也称为 Jabber) RTC(Real Time Collaboration,实时协作

    架构实战篇(九):Spring Boot 集成 RocketMQ

    快速集成阿里开源消息队列 RocketMQ

    老板说:明天来加班写个FCM消息推送功能......

    基于Spring Boot集成Firebase实现FCM消息推送功能

    Node&RabbitMQ系列六 保证消费

        上篇文章主要以生产者角度:确保消息发出去了,这篇文章主要以消费者角度:确保处理了对应消息 Quonum Queue不适用场景适用场景代码实现RePublish

    nvm常见配置问题

      本文涉及使用nvm时候 常见三个问题 zsh: command not found: npm curl: (7) Failed to connect to raw

    JavaScript作业队列和微任务

    JavaScript作业队列和微任务 当Promises在ES6中首次引入时,它们使编写异步代码工作变得更加容易。回调地狱被更简单构造所取代,该构造使开发人员可以更轻松地处理异步任务。理解诺言

    Kafka系列

      分区 Kafka 消息组织方 式实际上是三级结构:主题 - 分区 - 消息 问题一:为什么 Kafka 要做这样设计?为什么使用分区概念而不是直接使用多个主题呢? 分区