kafka-consumer-groups.sh --bootstrap-server kafka:9092 --describe --group log-sink
kafka-topics.sh --bootstrap-server kafka:9092 --describe --topic app-log

日志平台里最新一条记录的时间和服务器当前时间差 90 秒,Kafka 的 consumer lag 显示 60 万。业务侧 15 秒就能出结果,运维排查时看到的却是两分钟前的状态。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,采集端按批发送,批大小 1M、linger 5 秒,高峰期吞吐不够就开始堆积。消费端只有一个分区在消费,分区数 3 但两个副本没分配。lag 上去之后延迟按线性增长,不会自己回落。

「采集端到端延迟」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。改完隔一天再看一次,当场正常不代表能稳住。

测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。

处理上按这个顺序:先看 lag 曲线 确认是生产快还是消费慢;把消费并发提到分区数 别让分区空着;调大批量发送的压缩 减少网络往返;用一条带时间戳的测试日志 量端到端的秒数。

改完只确认一件事:lag 回到 1 万以内,测试日志从产生到可查的延迟在 10 秒内。

作者 9823189