一般的出现消息积压的原因:
- 生产这生产消息速度太快,导致消费者消费不过来;
- 消费者出现了bug,导致消费速度显著降低了。
遇到消息积压,我们需要先排查下,判断是不是有bug,有bug就赶紧修,具体流程:
- 修复问题:修复消费者的问题,确保消费者可以恢复消费速度;
- 消息队列临时扩容:
- 新建一个Topic,分区为原来的10倍,建好是原来10倍的队列数量,暂时停掉现有消费者服务器;
- 写一个临时的分发消费者:用于消费消息堆积的Topic消息,消费后不做处理,只是单纯的把消息均匀地转发到上面建好的Topic中;
- 修复后的consumer消费新的Topic,临时部署多几台服务器,如原来的10倍数量,每批消费者节点消费一个临时的queue数据;
- 最后,堆积消息处理完之后,恢复原先的部署架构,重启修复后的消费者改回继续消费原来的Topic。
如果消息积压不是bug引起的,可以这么做:
- 检查消费逻辑,查看是否有优化空间,比如如果原来是一条一条处理的,可否优化为批处理;
- 对消息队列进行扩容,增加Topic的队列数以及消费组内的机器数量,从而提升消费能力。