促销结束后 order-event 的 lag 从 3 万涨到 102 万,六个消费者实例 CPU 都在 8% 左右,线程栈里大部分停在 OkHttp 的 readResponse。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,每条消息都要同步调一次库存服务,对方 P99 从 80 毫秒涨到 1.8 秒,消费线程全被这一次调用占住。分区只有六个,实例再加也分不到更多分区。
「Kafka 消费慢下游」这类改动最怕改一半,回滚脚本先准备好,再动生产。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
kafka-consumer-groups.sh --bootstrap-server kafka:9092 \ --describe --group order-consumer jstack 21455 | grep -A 8 'OkHttp' kafka-topics.sh --bootstrap-server kafka:9092 --describe --topic order-event
同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
具体做法是,先把库存查询改成批量接口 一次带 50 个 SKU;给下游调用设 300 毫秒超时 失败落重试队列不要阻塞主流程;临时把 fetch.min.bytes 调到 1MB 让单次拉取更满;观察 CPU 和 lag 两条曲线是否同步变化。
最后用这个标准收尾,单条处理时间回到 120 毫秒以内 lag 在四十分钟内从 100 万降到 5 万以下。
