一、确认消息堆积的原因:
1. 是否是消息消费失败重试导致?
▪ 顺序消息在消费失败后会一直重试,务必保证应用能够及时监控并处理消费失败的情况。
▪ 普通消息在消费失败后,每隔1s重试一次。
2. 是否是处理复杂业务性能问题导致?
▪ 优化业务,提高业务处理能力。
▪ queue扩容,消费端扩容。
二、发现消息堆积后首先要处理堆积的消息:
这时候就得想办法赶紧把积压的消息消费完,就得考虑提高消费能力,一般有两种办法:
消费者扩容:如果当前Topic的MessageQueue的数量大于消费者数量,就可以对消费者进行扩容,增加消费者,来提高消费能力,尽快把积压的消息消费玩。(一个Topic默认有4个Queue)
消息迁移Queue扩容:如果当前Topic的MessageQueue的数量小于或者等于消费者数量,这种情况,再扩容消费者就没什么用,就得考虑扩容MessageQueue。可以新建一个临时的Topic,临时的Topic多设置一些MessageQueue,然后先用一些消费者把消费的数据丢到临时的Topic,因为不用业务处理,只是转发一下消息,还是很快的。接下来用扩容的消费者去消费新的Topic里的数据,消费完了之后,恢复原状。