kafka-consumer-groups.sh --bootstrap-server kafka:9092 --describe --group order-consumer kafka-run-class.sh kafka.tools.JmxTool --object-name kafka.consumer:type=consumer-fetch-manager-metrics,client-id=*
下单接口压到 10000 QPS,响应都在 50 毫秒内。压测结束两小时,Kafka 的 lag 还有 80 万,订单状态更新延迟到 40 分钟。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,压测只打了同步接口,消息发出去就算成功,消费端的能力没进压测范围。消费线程只有 4 个,单条处理 30 毫秒,理论吞吐 130 条每秒,和生产的 10000 差两个数量级。
「异步消费压测」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。改完隔一天再看一次,当场正常不代表能稳住。
测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
处理上按这个顺序:把消费端也纳入压测 用同一批消息回放;按 lag 和消费耗时算需要的消费者数量;消费者扩到分区数 提高并行度;压测指标里加一条端到端延迟 从下单到状态更新。
改完只确认一件事:压测期间 lag 保持在 1 万以内,下单到状态更新的延迟在 5 秒以内。
