如果 Kafka 中出现大量消息积压,消费速度长期低于生产速度,应该怎么处理?
1先快速解决线上问题,看一下积压的是什么topic业务的数据,如果是日志、埋点、推荐系统的可以直接丢掉,让订单、支付等核心业务逻辑去跑。 本质是快速止血,减少业务的损失。
2如果已经是核心业务逻辑积压了,同一个消费者组里面,消费者数量要大于topic分区数,分区不足先扩容分区,再增加消费者的数量,提升并行消费能力。 一个消费者只能消费一个topic分区的数据,如果直接加消费者不加分区那边也是没有用的
3可以提高消费者每次拉取的offset大小,让消费者一次拉取的数据多一些,减少多次的网络IO。
4如果业务一直都是正常的,没有什么大促或者是搞活动,应该就是下游的消费者出现了接口调用超时、死锁、慢查询等情况,根据日志进行详细的分析,进行优化。 可以根据traceId 去日志平台grep日志,看一下整条链路的执行情况。
5最后就是完善监控,在下次业务出现积压的时候能及时发现,然后进行优化。