【RocketMQ】RocketMQ消息堆积的问题怎么处理?

 RocketMQ消息堆积的问题

1.发生的原因:

  由于Consumer故障导致消费着节点全部宕机,生产者还在不停的投递消息到Broker,消息被挤压在Broker没有被消费;

2.消息堆积导致的问题:

  过多的数据不仅占用磁盘空间,还会影响MQ性能;

3.解决方案:

  分三种情况:

  情况0,如果消息是可以被丢弃的,那么就修改代码直接将代码中获取的消息直接丢弃,不做任何处理;

  情况1, Topic中MessageQueue的数量大于Consumer的实例数量,可以将Consumer扩容,MessageQueue 会进行Rebalance重新分配给Consumer实例,此时多个Consumer实例可以迅速消费掉堆积的消息,但是要考虑到的后续如果业务中有DB操作,DB是否支持这么高的读写操作;

  情况2, Topic中MessageQueue的数量小于Consumer的实例数量,此时直接扩容Consumer的实例数量是没用的,扩容后的Consumer实例仍然无法消费MessageQueue里面的消息; 此时可以修改项目代码,新建一个临时的Topic,制定临时Topic的MessageQueue数量为多个,然后再启动多个临时消费实例;此时Consumer将堆积的Topic里面对应的消息,不处理,收到后直接丢到新的Topic里面去,让消费者去消费

上一篇:【RocketMQ】RocketMQ指定Topic对应的MessageQueue的数量


下一篇:Handler机制源码分析笔记