Kafka在Ubuntu上如何进行压力测试
小樊
47
2025-12-30 23:32:21
在 Ubuntu 上对 Kafka 进行压力测试
一 准备与基线
- 安装与路径:确保已安装 Apache Kafka,脚本位于 $KAFKA_HOME/bin/(常见路径如 /opt/kafka/bin/ 或 /usr/local/kafka/bin/)。
- 创建测试主题(示例为 3 分区、副本因子 3,按实际集群规模调整):
/opt/kafka/bin/kafka-topics.sh --bootstrap-server broker1:9092:9092,broker2:9092,broker3
–create --topic perf-test --partitions 3 --replication-factor 3
- 基线校验:先用小流量验证连通性与基本吞吐,再进入正式压测。
以上步骤使用的脚本与参数样式见官方与业界常用实践。
二 生产者压测
- 关键指标:关注 records/sec、MB/sec、平均/最大/分位延迟。
- 常用命令模板:
/opt/kafka/bin/kafka-producer-perf-test.sh
–topic perf-test
–num-records <总条数>
–record-size <单条大小字节>
–throughput <目标吞吐,条/秒;-1 表示不限速>
–producer-props bootstrap.servers=broker1:9092:9092,broker2:9092,broker3
acks=<0|1|all>
batch.size=<如 16384/65536>
linger.ms=<如 0/10>
compression.type=<none|lz4|snappy|zstd>
- 示例(1KB 消息、不限速、lz4 压缩、acks=1):
/opt/kafka/bin/kafka-producer-perf-test.sh
–topic perf-test
–num-records 10000000
–record-size 1024
–throughput -1
–producer-props bootstrap.servers=broker1:9092,broker2:9092,broker3:9092
acks=1 batch.size=65536 linger.ms=10 compression.type=lz4
- 解读要点:吞吐受 分区数、ack 策略、批量大小、linger、压缩、网络/磁盘 影响;acks=all 更稳但延迟更高。
上述命令与参数说明、输出项含义见官方脚本与性能实践。
三 消费者压测
- 关键指标:关注 消费速率(records/sec、MB/sec)、处理时延、消费滞后(lag)。
- 常用命令模板:
/opt/kafka/bin/kafka-consumer-perf-test.sh
–bootstrap-server broker1:9092:9092,broker2:9092,broker3
–topic perf-test
–messages <总条数>
–threads <并发线程数>
[–print-metrics]
- 示例(单线程基线):
/opt/kafka/bin/kafka-consumer-perf-test.sh
–bootstrap-server broker1:9092,broker2:9092,broker3:9092
–topic perf-test
–messages 10000000
–threads 1
- 多线程与稳定性:多线程可提升总吞吐,但需确保 分区数 ≥ 并发线程数,否则线程争用会降低效率。
以上用法与参数见官方脚本说明与案例。
四 端到端延迟与数据完整性校验
- 端到端延迟思路:在消息 key 或 value 中携带发送时间戳,消费者计算 当前时间 − 发送时间 得到延迟分布;适合用小规模高频率数据验证延迟百分位。
- 完整性校验思路:
- 计数法:用消费者脚本输出统计,或用 kcat 消费至文件后
wc -l 对比生产条数。
示例:
/opt/kafka/bin/kafka-consumer-perf-test.sh --bootstrap-server --topic perf-test --messages 10000000 --threads 1
或用 kcat
kcat -b -t perf-test -C -e | wc -l
- 对比法:生产者脚本会输出 已发送条数与速率,与消费者统计或 kcat 计数比对,验证无丢失与重复(在 幂等/事务 配置下更易达成)。
上述方法适用于验证压测过程中的 延迟与数据一致性。
五 场景设计与稳定性建议
- 场景矩阵建议:
- 消息大小:100B / 1KB / 10KB;
- ack 策略:0 / 1 / all;
- 批量与等待:batch.size(16KB/64KB)、linger.ms(0/10);
- 压缩:none / lz4 / snappy / zstd;
- 分区数:从 3 起步,结合并发与延迟目标逐步调整;
- 并发:多台压测客户端、每台多实例,逐步加压观察拐点。
- 稳定性与容量:
- 分区数建议 ≥ 3,过多分区会增加协调开销;
- 客户端并发建议 逐步增加,避免瞬时同时起压导致客户端或 Broker 抖动;
- 监控 Broker I/O、网络、JVM GC、请求耗时、ISR 变化,以定位瓶颈。
以上为压测设计与稳定性实践的通用建议。