MQ系列13:消息大量堆积如何为解决

这篇具有很好参考价值的文章主要介绍了MQ系列13:消息大量堆积如何为解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MQ系列1:消息中间件执行原理
MQ系列2:消息中间件的技术选型
MQ系列3:RocketMQ 架构分析
MQ系列4:NameServer 原理解析
MQ系列5:RocketMQ消息的发送模式
MQ系列6:消息的消费
MQ系列7:消息通信,追求极致性能
MQ系列8:数据存储,消息队列的高可用保障
MQ系列9:高可用架构分析
MQ系列10:如何保证消息幂等性消费
MQ系列11:如何保证消息可靠性传输
MQ系列12:如何保证消息顺序性

1 背景

我们在前面两个章节中,介绍了消息组件如何保证可靠性传输和顺序行消费,参考上面系列的11、12章节。

  • 比如在消息生产阶段,如何保证消息发出的稳定性和可靠性;
  • 在消息服务器处理阶段,如何保证消息从生产到发送出去,经过网络传输,再到达Broker服务器并被接收的这整个阶段的可靠性,即如何使用ACK机制来保证消息传递的可靠性;
  • 还有就是消息消费的可靠性,Broker作为消息服务器,消息接收并持久化消息并消费的整个过程的可靠性如何保障。
    对于消息队列组件来说,这几个步骤出现问题,都有可能造成消息队列无法进行正常运行,消息堆积的情况发生。
    另外一种情况可能就是突发的流量峰值,这种一般发生在某种消费促销活动或者各种抢购、竞拍场景中。

2 原因分析

2.1 消息生产(Producer)远超预期

消息的生产的规模远超过原来的预期值,成数倍甚至几十倍的增长,这种产生的原因可能如下:

  1. 比如遇到各种流量冲击的活动:618、双11大促、竞拍、抢购、秒杀业务。(这种需要做好容量预估管理)
  2. 程序缺陷;死循环调用、批量请求、内存泄漏导致的流量飙升问题。(这种需要做好)

MQ系列13:消息大量堆积如何为解决

2.2 消息接收和持久化出现故障

Broker服务器接收消息并持久化出现问题:服务故障、网络延迟、持久化失败等,这种情况一般也比较少见...

2.3 消息消费(Consumer)能力下降致消息堆积

出现原因可能有如下几种:

  • 消费失败时大量重试导致消息堆积。
  • 消费者程序的故障:如 程序死锁,io阻塞等。
  • 消费者资源瓶颈:目前的主流消息队列,单个节点消息收发的性能可以达到万级别甚至10万级+的水平。除非容量预估没有做好,一般不会出现这种问题。即使出现这种问题,通过Scale Out Broker 的实例数也是比较轻松可以解决的。

3 消息堆积的解决方案

根据上面的整理,在遇到消息堆积的时候,先检查下导致堆积的原因,看符合上述的三个原因的哪一个。

  • 消息生产(Producer)远超预期
  • 消息接收和持久化出现故障
  • 消息消费(Consumer)能力下降致消息堆积

找到原因之后,把问题处理完成,然后临时扩容,来处理堆积的消息数据。具体操作步骤如下,参考下面的图:

  • 先分析原因,如果是Consumer或者Broker出现故障要先确保恢复故障;如果是消息消费问题,先修复程序问题。
  • 暂停现有Consumer的消费动作。
  • 临时建立好原先10倍(或者N倍)的queue数量,即新建topic,partition分区是原来的10倍。
  • 写一个程序,这个程序只做简单的转发工作,目的就是将消费积压的消息,均匀的消费到临时扩容好的queue里(这里面有10倍的容量)。
  • Consumer也扩容10倍,对应一个Consumer消费一个临时的Queue。相应的被消费者依赖的业务处理服务也需要对应的扩容,包含缓存、数据库、文件服务等等。
  • 快速消费结束之后,记得恢复原来的消费架构,避免大量资源浪费。

MQ系列13:消息大量堆积如何为解决

总结

本文介绍了消息堆积可能导致的原因,以及基本的处理步骤。大部分消息中间件的健壮性都是非常好的。
业务的不合理使用和扩展一般是主要诱因,所以平时需要多关注业务服务的变化。文章来源地址https://www.toymoban.com/news/detail-476981.html

到了这里,关于MQ系列13:消息大量堆积如何为解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何解决RocketMQ消息堆积的问题

    MQ消息堆积是指生产者发送的消息短时间内在Broker端大量堆积,无法被消费者及时消费,从而导致业务功能无法正常使用。 (1)新上线的消费者功能有bug,消息无法被消费 (2)消费者实例宕机或者因为网络问题暂时无法与Broker建立连接。 (3)生产者短时间内大量推送消息

    2023年04月26日
    浏览(36)
  • RabbitMQ(四) | 惰性队列 - 解决消息堆积问题

    接上一篇:RabbitMQ(三) | 死信交换机、死信队列、TTL、延迟队列(安装DelayExchange插件) 当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限。之后发送的消息就会成为死信,可能会被丢弃,这就是消息堆积问题。

    2024年02月01日
    浏览(29)
  • RabbitMQ - 消息堆积问题的最佳解决方案?惰性队列

    目录 一、惰性队列 1.1、消息堆积问题 1.2、消息堆积问题的解决方法 从消费者的角度: 从队列的角度: 1.3、引入惰性队列 1.3.1、什么是惰性队列 1.3.2、惰性队列的使用 1.3.3、效果演示 当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到

    2024年02月05日
    浏览(31)
  • MQ系列12:如何保证消息顺序性

    MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 MQ系列5:RocketMQ消息的发送模式 MQ系列6:消息的消费 MQ系列7:消息通信,追求极致性能 MQ系列8:数据存储,消息队列的高可用保障 MQ系列9:高可用架构分析

    2024年02月08日
    浏览(49)
  • 【MQ 系列】SpringBoot + RabbitMq 消息确认/事务机制的使用姿势

    我们知道 RabbitMq 提供了两种机制,来确保发送端的消息被 brocke 正确接收,本文将主要介绍,在消息确认和事物两种机制的场景下,发送消息的使用姿势 首先创建一个 SpringBoot 项目,用于后续的演示 springboot 版本为 2.2.1.RELEASE rabbitmq 版本为  3.7.5   依赖配置文件 pom.xml 在 a

    2024年01月18日
    浏览(34)
  • 【消息中间件MQ系列】Spring整合kafka并设置多套kafka配置

            圣诞节的到来,程序员不会收到圣诞老人的🎁,但可以自己满足一下自己,所以,趁着有时间,就记录一下这会儿撸了些什么代码吧!!!         因为业务原因,需要在系统内新增其他的kakfa配置使用,所以今天研究的是怎么在系统内整合多套kafka配置使用。

    2024年02月01日
    浏览(82)
  • RabbitMQ消息丢失的场景,MQ消息丢失解决方案

    第一种 : (生产者) 生产者弄丢了数据。生产者将数据发送到 RabbitMQ 的时候,可能数据就在半路给搞丢了,因为网络问题啥的,都有可能。 第二种 : (服务端) RabbitMQ 弄丢了数据。MQ还没有持久化自己挂了 第三种 : (消费者) 消费端弄丢了数据。刚消费到,还没处理

    2024年02月08日
    浏览(37)
  • MQ消息丢失的可能原因与解决方案

    当我们使用消息队列(MQ)作为分布式系统中的核心组件时,消息丢失是一个常见的问题。消息丢失可能导致数据不一致或功能故障,因此对于许多应用程序来说是不可接受的。本文将介绍几种常见的MQ消息丢失的原因,并提供相应的解决方案。 生产者在发送消息时可能会遇

    2024年02月15日
    浏览(30)
  • 阿里三面:MQ 消息丢失、重复、积压问题,如何解决?

    作者:美得让人心动 来源:https://blog.csdn.net/gu131007416553/article/details/120934738 面试官在面试候选人时,如果发现候选人的简历中写了在项目中使用了 MQ 技术(如 Kafka、RabbitMQ、RocketMQ),基本都会抛出一个问题:在使用 MQ 的时候,怎么确保消息 100% 不丢失? 这个问题在实际工

    2024年02月09日
    浏览(33)
  • 阿里云的消息队列(MQ)服务如何帮助解决应用程序中的消息传递问题?

    阿里云的消息队列(MQ)服务如何帮助解决应用程序中的消息传递问题? [本文由阿里云代理商[聚搜云www.4526.cn]撰写] 随着企业应用程序的复杂性不断增加,消息传递在系统间的通信与协作中扮演着越来越重要的角色。本文将探讨阿里云的消息队列(MQ)服务如何帮助解决应用程

    2024年02月07日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包