首页/数据/数据工程与 ETL 速查/消费端压测 kafka-consumer-perf-test.sh
Kafka64 条

消费端压测 kafka-consumer-perf-test.sh

消费端压测评估拉取性能与消费者配置影响:指定消息数与组名,观察吞吐与分区间表现,用于验证扩容是否改善消费。

消费端压测是什么

kafka-consumer-perf-test.sh 是 Kafka 自带的消费端压测工具:从指定主题拉取指定条数的消息,输出拉取速率与字节速率,用来评估消费侧的实际能力。它做的是纯拉取(不执行任何业务处理),因此结果代表链路与配置的上限,而不是业务消费能力;这一点决定了它适合对比不同配置、分区数与线程数的差异,而不适合直接当作业务容量结论。

基本信息

工具位置Kafka 发行包 bin/ 目录,随版本变化以所用版本为准
必填参数--bootstrap-server、--topic
常用参数--messages、--group、--show-detailed-stats、--reporting-interval、--threads、--num-fetch-threads
输出内容消费总量与速率、抓取耗时、再平衡耗时
副作用会创建消费组并提交位移,务必使用独立组名
前提主题内已有足够数据,且保留策略不会在中途清理掉待读消息

典型使用场景

  • 容量评估:估算单个消费者实例能拉多少 MB/s,反推需要多少实例
  • 配置对比:验证增大 fetch 相关参数或线程数是否真的提升吞吐
  • 扩容验证:加分区与加消费者后再压测,确认提升幅度是否符合预期
  • 链路排查:消费慢时区分是拉取能力不足还是下游处理拖慢
  • 变更上线前:客户端或集群参数调整前先取得基线数据

消费压测示例

消费压测示例
# 独立组名 + 逐段统计,避免与业务消费组冲突
kafka-consumer-perf-test.sh --bootstrap-server kafka1:9092 \
  --topic perf-orders \
  --messages 1000000 \
  --group perf-consumer-20261012 \
  --show-detailed-stats \
  --reporting-interval 5000 \
  --threads 2 \
  --num-fetch-threads 4

# 压测结束后清理临时组,避免位移数据长期驻留
kafka-consumer-groups.sh --bootstrap-server kafka1:9092 --delete --group perf-consumer-20261012

输出逐列读法

列名含义异常表现
data.consumed.in.MB本次实际消费的数据量远小于预期说明可读数据不足或被保留策略清理
MB.sec按总耗时折算的吞吐明显低于同集群基线需查网络与 fetch 参数
data.consumed.in.nMsg消费的消息条数小于 --messages 说明数据量不够
nMsg.sec每秒消息条数,小消息场景的关键指标受单条大小影响,勿与 MB/s 混用比较
rebalance.time.ms再平衡耗时数值很大说明消费者启动或组协调存在问题
fetch.time.ms实际抓取耗时与总耗时差距大说明时间耗在等待与协调上
压测结果的瓶颈可能在客户端:单消费者线程数、fetch 参数与网络带宽都影响结果,先确认客户端不是瓶颈,再判断集群侧是否需要扩容。
消费压测会提交位移,绝不能复用业务消费组名,否则业务位移被覆盖,恢复时要么重复消费要么跳过数据。

易错点

  • 复用业务消费组名压测,把线上位移改掉,业务重启后大批数据被跳过
  • 只压不处理就当作业务消费容量:真实消费还要算下游写库与计算耗时
  • 主题里数据不足或保留期过短,压测中途消息被清理,结果偏小且不稳定
  • 单线程压测得出容量偏低的结论,据此盲目扩分区,浪费资源
  • 压测组不做清理,长期驻留的位移与组元数据造成后续组名冲突

数据来源与参考

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