一. 问题描述
我们的物料筛选排序系统之前经常会出现操作效果延迟的情况。在筛选排序数据不对时,我们一般会查看ES里存储的数据和DB里存储的数据是否一致,发现在一段时间内确实会存在数据不一致。我们怀疑是数据流下发存在延迟,于是立刻查看了kafka里消息增量数量的监控,发现出问题时kafka消息增量一般都堆积比较严重,而且看kafka的消息数变化曲线,消息堆积被消费后下降的速度要明显慢于平时下降的速度。因为在凤巢消息堆积和增量变多有时候是业务上的流量变大导致的,比如某些特殊的活动导致广告主调用API大量编辑物料,但是消息堆积后消费者的速度不但跟不上了,反而变得更慢了,这个问题是急需解决的。
二. 排查过程
我对消息堆积后消息被消费掉的速度变慢产生了好奇。首选我在思考是不是最近消费者模块有代码升级,导致消费者本身对业务的处理变慢了。但是看了git的提交之后,发现提交时间是在几个月前,要是是代码本身的问题,应该早就应该暴露了。
因为我们消费者模块主要的操作就是去读取kafka下发的增量然后解析增量的内容同步修改ES,然后怀疑是增量的什么原因,导致消息堆积后消息下降变慢。然后我在遇上线的环境上线了打印解析消息内容的日志,然后让QA同学用压测工具回放出现故障时的线上流量,然后我观察日志分析出问题的原因。结果发现了不但复现了消息堆积的情况,还发现消息堆积时还出现了大量的重复消息。于是我想到可能是由于消息堆积触发了kafka对消息回滚的策略,导致了大量的消息重发,因此存在这边消费者在消费消息,另一边却在不断重发消息,因此消息的下降速度会变慢
并且查看了错误日志,有大量以下报错
本文主要探讨了Kafka消息堆积和慢消费的问题,通过排查过程发现是由于max.poll.records过大和max.poll.interval.ms超时导致的。分析了Kafka消费者的处理逻辑和Rebalance机制,并提出了调整max.poll.interval.ms、降低max.poll.records、优化消费能力和监控消息消费速度的解决方案。
最低0.47元/天 解锁文章
3360

被折叠的 条评论
为什么被折叠?



