背景
线上订单服务10个POD节点,某kafka tpoic原有6个分区。
问题现象
上午11.30左右一波下单高峰,根据分布式消息告警发现有少量消息堆积,但是堆积量不大,持续几分钟后恢复正常。
下午1点后出现新一轮高峰,出现了大量消息堆积,堆积量超过两万。由于堆积的消息影响了三方外卖单的接单业务,陆续有门店反馈三方外卖单接单时间很长,只能手动接单。
处理过程
1.Topic分区扩容
由于当前Topic分区较少,服务节点数量已经大于分区数,加服务节点没有意义。再确定当前MQ消息顺序要求不是特别高且消费逻辑做了幂等以后决定把分区扩容一倍。
扩容后大部分分区堆积很快就消失了,但是仍然有四个分区不太正常。
原因是Topic扩容后有12个分区,但是当前服务节点只有10个,存在两个服务节点各自消费两个分区的情况,导致原有的堆积消息无法尽快处理完。
2.服务节点扩容
为了尽快处理完堆积的消息,加了两个POD节点。
经过消费者冲平衡后新加入的服务节点分担了堆积消息的分区,决定再看看效果。
几分钟后,12个分区消息堆积都解决了,但此时仍处于高峰,所以lag数扔维持几十左右,观察后发现消费速度稳定,没什么问题。