温馨提示×

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 变化,以定位瓶颈。
      以上为压测设计与稳定性实践的通用建议。

0