侧边栏壁纸
博主头像
月伴飞鱼 博主等级

行动起来,活在当下

  • 累计撰写 39 篇文章
  • 累计创建 25 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

消息队列产生严重消息堆积怎么处理?

月伴飞鱼
2025-03-07 / 0 评论 / 1 点赞 / 4 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

原因分析

消息生产(Producer)远超预期

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

  1. 比如遇到各种流量冲击的活动:618、双11大促、竞拍、抢购、秒杀业务。(这种需要做好容量预估管理)

  2. 程序缺陷;死循环调用、批量请求、内存泄漏导致的流量飙升问题。

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

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

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

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

  • 消费失败时大量重试导致消息堆积。

  • 消费者程序的故障:如 程序死锁,io阻塞等。

  • 消费者资源瓶颈:目前的主流消息队列,单个节点消息收发的性能可以达到万级别甚至10万级+的水平。除非容量预估没有做好,一般不会出现这种问题。即使出现这种问题,通过Scale Out Broker 的实例数也是比较轻松可以解决的。

RocketMQ消息堆积的解决方法

  1. 增加消费者数量

    • 消息堆积了,消费不过来了,可以通过增加消费者实例数量,让更多实例来消费消息,从而缓解堆积。

  2. 提升消费者消费速度

    • 消费者消费速度慢可能是消息堆积的主要原因,可以通过以下方式提升消费速度:

      • 引入线程池,提高消费的并发能力。

      • 将消息本地存储后立即返回成功,后续再慢慢处理复杂逻辑。

  3. 降低生产者的生产速度

    • 如果生产者是可控的,可以让生产者生成消息的速度慢一些,避免过量生产导致堆积。

  4. 清理过期消息

    • 一些过期的消息或无法成功消费的消息,在业务评估后如果无影响或者影响较小,可以选择清理,减轻堆积压力。

  5. 调整 RocketMQ 的配置参数

    • 调整消费模式、拉取间隔时间等 RocketMQ 参数,提高消费效率。例如缩短拉取间隔,或增大单次拉取的消息量。

  6. 增加 Topic 队列数

    • 如果一个 Topic 的队列数量过少,可能导致并发能力不足,从而出现堆积。增加队列数可以提高消息的处理并发度,有效缓解消息堆积。

公众号.png

1
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
    1. 支付宝打赏

      qrcode alipay
    2. 微信打赏

      qrcode weixin
博主关闭了所有页面的评论