消费端压测是什么
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 参数与网络带宽都影响结果,先确认客户端不是瓶颈,再判断集群侧是否需要扩容。
消费压测会提交位移,绝不能复用业务消费组名,否则业务位移被覆盖,恢复时要么重复消费要么跳过数据。