MQ怎么解决消息堆积的问题

MQ怎么解决消息堆积的问题

  • 网上普通回答

    • 修复consumer的问题,确保其恢复消费速度,然后将现有consumer都停止
    • 临时建立好原先10倍或者20倍的queue数量
    • 然后写一个临时的分发数据的consumer程序,这个程序部署上去消费积压的数据,消费之后不做耗时的处理,直接均匀轮询写入临时建立好的10倍数量的queue
    • 接着临时征用10倍机器来部署consumer,每一批consumer消费一个临时queue的数据
    • 这种做法相当于临时将queue资源和consumer资源扩大了10倍,以正常的10倍速度

    但是这种方法远水解决不了进渴

  • 用Shovel

    • 概念:当某个队列的消费堆积严重时,比如超过某个设定的阀值,就可以通过Shovel将队列消息移交到别的一个集群。
    • 当检测到一个队列出现严重的消息堆积的时候,比如可以通过/api/queue/vhost/name接口获取到队列的消息个数超过2000w或者消息的占用大小超过10g的时候,就启用shovel1将队列queue中的消息转发到备份集群的队列queue2。
    • 当检测到队列queue的消息个数低于100w的时候或者大小小于1GB就停止shovel1,然后等queue慢慢处理剩余的堆积。
    • 当queue的消息个数低于10W或者大小小于100MB时,就开启shovel2将队列queue2中暂存的消息返还给对queue。
    • 当检测到队列queue消息个数大于100W或者大小高于1GB就将shovel2停掉。
原文地址:https://www.cnblogs.com/dalianpai/p/14159767.html