一、Kafka如何解决消息积压问题?
首先分析一下消息积压问题的原因,如果不是系统BUG导致的,那就需要优化消费端的逻辑,来提高消费速率。
如果是系统BUG导致的,那么需要先修复系统BUG,然后再做临时扩容来消费大量的积压消息,具体步骤如下:
- 修复消费端的BUG,保证消费端有消费能力(即正常处理)
- 新建一个临时Topic,并且扩容机器到n台
- 写一个分发程序,将原积压Topic的消息重新消费后重新写入临时Topic里
- 等临时Topic把积压消息消费完后,将临时Topic和临时申请的机器释放掉
二、Kafka如何避免消息积压问题?
生产端:可以使用轮询策略,避免partition之间数据差距太大
消费端:
- 增加partition并行消费,尽量一个consumer敌营一个partition
- 解决消费端代码可能存在的BUG
- 调整消费超时时间,避免消费过慢导致出现重平衡
- 批量拉取多条消息消费,减少IO交互次数
- …