通常来说,消息积压的原因是生产者的消息生产速度大于消费者的消费速度,遇到这个
问题的时候,需要排查具体的原因再提出解决方案。
如果当前不是因为系统bug导致的,那我们可以优化消费端的逻辑,比如通过异步的方式来处理消息、或者通过批量处理的方式来消费。
如果通过这两种优化方式还没有缓解,可以考虑对消费端进行水平扩容,从而扩大消费
端的消费能力。
如果是因为系统bug导致大量消息堆积,那么首先需要解决系统bug,然后临时做紧急扩容来完成大量消息的消费。
1. 首先解决消费端的bug,来保证消费端的正常消息处理工作。
2. 接着把现在所有的消费端停止,然后新建一个Topic,然后把Partition分区数量调整成原来的10倍。
3. 接着写一个用来实现数据分发的Consumer程序,这个程序专门去消费现在积压的数据,消费后不做处理,而是直接再把这些数据写入临时建立的Topic的10个Partition中。
4. 然后临时增加10倍的消费者节点来部署Consumer,专门来消费临时的Partition分区数据。
通过上面这种方法,可以快速把现在堆积的消息处理完。等积压的消息处理结束后,再把恢复成原来的部署架构,把临时的Topic和临时申请的机器释放掉。