1. 课程导论与目标:为什么Kafka压测会出现异常波动
1.1 压测异常波动:一个典型的“幽灵”现象
在消息中间件性能测试中,Kafka 压测结果出现“锯齿状”或“断崖式”波动是最令 SRE 和性能测试工程师头疼的问题之一。明明集群资源(CPU、内存、磁盘)远未达到瓶颈,TPS 却忽高忽低,延迟时而稳定在 5ms,时而飙升到 500ms。这种异常波动往往不是单一原因造成的,而是 Kafka 链路中多个环节共同作用的结果。
典型场景: 某电商大促前的全链路压测中,Kafka 生产端 TPS 在 80% 并发量下出现周期性“掉底”,从 12w msg/s 骤降至 3w msg/s,持续 10-15 秒后恢复。排查发现:
• 应用层:生产者 batch.size 设置过大,导致内存 GC 频繁
• Broker 层:单分区 leader 副本所在磁盘 IO 等待时间超过 200ms
• 网络层:客户端与 Broker 之间的 TCP 窗口收缩,触发背压
• 应用层:生产者 batch.size 设置过大,导致内存 GC 频繁
• Broker 层:单分区 leader 副本所在磁盘 IO 等待时间超过 200ms
• 网络层:客户端与 Broker 之间的 TCP 窗口收缩,触发背压
1.2 为什么Kafka压测会出现异常波动?——五大根因维度
异常波动的根因通常分布在以下五个维度,每个维度都可能成为“木桶的短板”:
| 维度 | 典型异常表现 | 常见根因 |
|---|---|---|
| 客户端配置 | TPS 锯齿状波动,延迟周期性升高 | batch.size/linger.ms 不匹配、acks 设置不当、内存缓冲区溢出 |
| Broker 负载 | 单节点 CPU 飙高,请求队列堆积 | 分区分配不均、IO 线程数不足、网络线程阻塞 |
| 磁盘 IO | 写入延迟陡增,Page Cache 抖动 | 磁盘 IOPS 打满、操作系统脏页回刷策略、RAID 卡缓存策略 |
| 操作系统/网络 | 连接超时、重试激增、吞吐量断崖 | TCP 缓冲区不足、Socket backlog 溢出、网卡软中断均衡 |
| JVM/GC | STW 停顿导致生产/消费暂停 | 堆内存过小、G1GC 并发标记周期、大对象分配 |
排查原则: 异常波动 ≠ 资源瓶颈。很多时候资源利用率只有 40%,但波动已经出现。必须从“端到端”视角逐层剥离,而非仅盯着 Broker 指标。
1.3 课程面向人群
本课程专为以下三类工程师设计,帮助你在 30 章内建立从“现象”到“根因”的完整排查能力:
- SRE / 运维工程师: 负责 Kafka 集群稳定性,需要快速定位压测中的异常抖动,制定容量规划。
- 性能测试工程师: 执行压测脚本时遇到波动数据,需要区分“测试工具问题”与“系统问题”。
- 中间件开发 / 架构师: 深入理解 Kafka 内部机制,优化客户端参数和集群部署策略。
1.4 课程核心目标
完成本课程后,你将具备以下四项核心能力:
- 建立链路排查思维: 从生产者 → Broker → 消费者 → 操作系统,形成完整的排查路径。
- 掌握关键指标解读: 区分“正常波动”与“异常波动”,读懂 JMX 指标、系统日志、TCP 抓包。
- 熟练使用排查工具: 包括 kafka-run-class.sh、jstack、iostat、perf、tcpdump 等实战工具。
- 输出可复现的排查报告: 每次压测波动都能定位到具体代码行或配置项,而非模糊的“网络抖动”。
1.5 学习路径与课程结构
课程按“基础 → 排查 → 优化”三阶段递进,共 30 章:
1.6 本章小结与前置准备
在进入后续章节之前,建议你准备好以下环境,以便同步实践:
- Kafka 集群: 至少 3 节点,版本 2.8+(推荐 3.x 系列)
- 压测工具: 官方 kafka-producer-perf-test.sh / kafka-consumer-perf-test.sh
- 监控工具: JMX 采集(Prometheus + Grafana)或 Kafka Manager
- 系统工具: iostat、vmstat、sar、tcpdump、jstack、jstat
重要提醒: 本课程所有排查方法均基于“非破坏性”原则。在生产环境执行压测前,务必确认隔离环境或使用影子流量,避免影响在线业务。