首页/数据/数据工程与 ETL 速查/生产端压测 kafka-producer-perf-test.sh
Kafka64 条

生产端压测 kafka-producer-perf-test.sh

生产端压测用于评估单分区/集群写入能力与客户端配置影响:输出吞吐与延迟分位,是容量规划与参数调优的依据。

生产端压测测什么

kafka-producer-perf-test.sh 是 Kafka 自带的生产端压测工具,模拟指定大小与条数的消息写入,输出吞吐(records/sec、MB/sec)与延迟分位数。它的价值在于把「这台集群、这套配置能写多快」变成可测量的数据,用于容量规划、分区数估算与客户端参数调优。结论只有在压测配置与生产一致时才有参考意义。

基本信息

关键参数--num-records、--record-size、--throughput、--producer-props
输出指标records/sec、MB/sec、平均与各分位延迟
建议做法在专用主题上压测,客户端配置与生产保持一致
解读要点吞吐看 MB/sec,延迟看 p99 而不是平均值

典型使用场景

  • 容量规划:估算单分区与集群写入上限,反推所需分区数
  • 参数调优对比:量化 acks、compression.type、batch.size、linger.ms 改动的效果
  • 升级前后基线对比:客户端或 broker 版本升级后确认没有性能回退
  • 故障复盘:确认故障期间写入能力的下降幅度
  • 验收测试:新集群上线前跑一遍,确认达到设计指标

压测与收尾

压测与收尾
# 基础压测:100 万条 512 字节消息,不限速,acks=all 加 lz4 压缩
kafka-producer-perf-test.sh --topic perf-orders \
  --num-records 1000000 --record-size 512 --throughput -1 \
  --producer-props bootstrap.servers=kafka1:9092 acks=all compression.type=lz4

# 限速压测:控制在 10000 条/秒,观察稳定状态下的延迟
kafka-producer-perf-test.sh --topic perf-orders \
  --num-records 500000 --record-size 1024 --throughput 10000 \
  --producer-props bootstrap.servers=kafka1:9092 acks=1 linger.ms=20

# 压测结束后删除专用主题,避免残留数据长期占盘
kafka-topics.sh --bootstrap-server kafka1:9092 --delete --topic perf-orders

输出指标读法

指标含义关注点
records/sec每秒写入条数与消息大小强相关,需同时看 MB/sec
MB/sec每秒写入数据量容量规划的主要依据
avg latency平均延迟会被慢批次拉低,不能单独使用
p50/p95/p99延迟分位数p99 更能反映业务长尾体验
max latency最大延迟出现尖峰通常是 GC 或副本同步抖动
压测会真实写入数据并占用磁盘与网络带宽,应在低峰执行、控制记录数,结束后删除测试主题;在没有限速的情况下直接对生产集群全速压测,可能影响线上业务。
--throughput -1 表示不限速,以当前最快速度写入;更适合先用小记录数验证一次,再按需要放大规模,而不是上来就跑千万条。

易错点

  • 用 --throughput -1 不限速直接打满磁盘与带宽,可能影响线上业务,应先小步验证
  • 只看平均吞吐与平均延迟,忽略 p99,低估真实业务的长尾延迟
  • 压测参数与业务链路配置不一致(acks、压缩、批量都不同),结论无法迁移
  • 压测数据写完不清理,专用主题长期占盘,反而成了新的容量隐患

数据来源与参考

  • Apache Kafka 官方文档:Producer Performance Testing
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌