消息队列经典面试问题(六)

297 阅读1分钟

常见面试问题

  • 如何处理消息大量堆积的问题

问题产生原因

这种问题其实在生产上时有发生,当你的消费者出现故障了,或者消费的极慢,就有可能导致消息大量堆积,因为生产者在不停的消费,而消费者不再消费消息了。

如何解决

首先你需要修复consumer,确保正常消费,根据业务看是否需要暂停,那由于你的消费者曾经不正常,可能导致堆积了大量的消息,那以原有的消费速度,可能需要一定时间才能把堆积的消息消费完,这个时候解决的核心思想是临时扩容,以更快的速度去进行消费,以kafka为例,你可以新建一个topic,partition是原来的10倍,然后做一个临时分发数据的消费程序,让这个程序去消费挤压的数据,这个程序不做任何处理,让它写入新的topic中,再部署之前10倍的consumer去消费新的topic,这样就相当于以之前10倍的速度去处理队列速度,当消费完之后,再恢复原来的部署。(注意:以kafak和RocketMQ为例,单纯增加消费者数量,会导致消费者分配不到queue,一般要求queue或partition数量大于消费者数量