MQ消息堆积是指生产者发送的消息短时间内在Broker端大量堆积,无法被消费者及时消费,从而导致业务功能无法正常使用。
消息堆积常见于以下几种情况:
(1)新上线的消费者功能有bug,消息无法被消费
(2)消费者实例宕机或者因为网络问题暂时无法与Broker建立连接。
(3)生产者短时间内大量推送消息到Broker,消费者消费能力不足。
(4)生产者未感知到Broker消费堆积,持续向Broker推送消息。文章来源:https://www.toymoban.com/news/detail-425681.html
解决上述问题需要做到:
(1)解决问题一,要做好灰度发布,每次新功能上线前,选取一定比例的消费实例做灰度(灰度测试,就是在某项产品或者应用发布前,选择特定人群使用,逐步扩大其使用者的数量,以便于及时发现和纠正其中的问题),若出现问题,及时回滚;若消费者消费正常,平稳运行一段时间后,再升级其他实例。
(2)解决问题二,要做到多活,极端情况下,当一个IDC(互联网数据中心?)内消费实例全部宕机后,需要做到让其他IDC内的消费实例正常消费消息。同时,若一个IDC内Broker全部宕机,需要支持生产者将消息发送到其他idc中的Broker。
(3)解决问题三,要增强消费能力,主要是增加消费者线程数或者增加消费者实例的个数,增加消费者线程数要注意消费者及其下游服务的消费能力,上线前要将线程池参数调到最优状态。增加消费者实例个数,要注意Queue的数量,消费实例的数量要与Queue数量相同,如果消费实例数量超过Queue的数量,多出的消费实例分不到Queue,只增加消费实例是没有用的,如果消费实例数量比Queue数量少,每个消费实例承载的流量都是不同的。
(4)解决问题四,要做到熔断与隔离,当一个Broker的队列出现消息积压时,要对其熔断,将其隔离,将新消息发送发送至其他队列,过一定的时间,再解除其隔离。文章来源地址https://www.toymoban.com/news/detail-425681.html
到了这里,关于如何解决RocketMQ消息堆积的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!