rabbitmq消息快速积压如何处理

分析一下影响:
积压的定义的什么?超过几十万条消息没有消费?还是达到磁盘警戒水位线?
如果只是消息数量多,暂时没有因为消息积压影响MQ服务器性能,可以做常规处理。
如果消息太多导致MQ服务器性能下降,或者消息不出队,可以做紧急处理。

再分析原因:
为什么出现消息积压?
1、kafka的消息消费以后不会立即删除,所以不存在瞬间堆积的情况,由几个配置控制

// 存放超过72个小时的消息,过期
private int fileReservedTime = 72;
// 每天凌晨4天清除过期的consume queue和log文件
private String deleteWhen = "04";
// 磁盘使用空间超过了75%,开始删除过期文件;超过85%,会开始批量清理文件,不管有没有过期;超过90%,会拒绝消息写入
private int diskMaxUsedSpaceRatio = 75;

2、RabbitMQ,没有消费者消费消息。
3、RabbitMQ,生产者产生消息速度太快,消费者消费能力跟不上
4、RabbitMQ,消费者消费消息以后没有给Broker发送ACK,导致队头消息不出队,后续消息不能消费

从几个环节来看:
1、生产者:如果出现了不断重复发送消息的情况,需要马上停掉
2、Broker:
1)如果经常出现磁盘内存不可用,考虑升级硬件
2)如果无法升级硬件配置,通过磁盘和内存限制控制堆积的消息数(RabbitMQ),或者加快过期日志的清理(Kafka)
3)对消息设置过期属性(RabbitMQ)
4)如果消息不重要,可以直接清除掉:写一个程序直接消费消息然后丢弃(RabbitMQ)

3、消费者
1)增加消费者的个数,或者多线程消费(RabbitMQ)
2)如果是因为队头的消息没有发送ACK导致的(RabbitMQ),可以重启消费者,再次消费这条消息,发送ACK。
如果是消费者代码问题导致无法发送ACK,可以直接修复程序或者单独编写消费者处理队头的消息。

你可能感兴趣的:(rabbitmq消息快速积压如何处理)