温馨提示×

Kafka在Debian上的性能测试如何进行

小樊
34
2025-12-10 05:51:46
栏目: 智能运维

在 Debian 上进行 Kafka 性能测试

一 环境准备

  • 安装 Java 与 Kafka
    • 安装 OpenJDK 11:sudo apt update && sudo apt install openjdk-11-jdk -y
    • 下载并解压 Kafka(示例版本 3.6.1): wget https://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz tar -xzf kafka_2.13-3.6.1.tgz && mv kafka_2.13-3.6.1 /opt/kafka
  • 启动 Zookeeper 与 Broker(单节点演示)
    • /opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties &
    • /opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties &
  • 快速连通性验证
    • /opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --list
  • 可选 使用 Docker 快速起测(便于隔离环境)
    • docker pull wurstmeister/kafka:3.0.0
    • docker run -e KAFKA_BROKER_ID=1
      -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
      -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
      -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092
      -d --name kafka3 wurstmeister/kafka:3.0.0

二 基准测试步骤

  • 创建测试主题(建议多分区以匹配并发)
    • /opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092
      –create --topic perf-test --partitions 8 --replication-factor 1
  • 生产者压测
    • 小消息、无压缩、不限速基线 /opt/kafka/bin/kafka-producer-perf-test.sh
      –topic perf-test --num-records 10000000 --record-size 100
      –throughput -1
      –producer-props bootstrap.servers=localhost:9092
      acks=1 batch.size=16384 linger.ms=0 compression.type=none
    • 1KB 消息、LZ4 压缩、适度攒批 /opt/kafka/bin/kafka-producer-perf-test.sh
      –topic perf-test --num-records 10000000 --record-size 1024
      –throughput -1
      –producer-props bootstrap.servers=localhost:9092
      acks=1 batch.size=65536 linger.ms=10 compression.type=lz4
  • 消费者压测
    • 单线程 /opt/kafka/bin/kafka-consumer-perf-test.sh
      –bootstrap-server localhost:9092 --topic perf-test --messages 10000000
      –threads 1 --print-metrics
    • 多线程 /opt/kafka/bin/kafka-consumer-perf-test.sh
      –bootstrap-server localhost:9092 --topic perf-test --messages 10000000
      –threads 8 --print-metrics
  • 常用参数提示
    • 生产者:acks(吞吐/持久性权衡)、batch.size、linger.ms、compression.type、buffer.memory
    • 消费者:–threads(并发度)、–fetch-size(单次拉取字节)、–group(消费者组)

三 监控与结果解读

  • 关键指标
    • 生产者:吞吐量(records/s、MB/s)、平均/最大延迟、请求耗时分布
    • 消费者:吞吐量(MB/s、records/s)、重平衡时间、fetch 耗时、消费者滞后(Consumer Lag)
  • 监控手段
    • JMX:使用 JConsole/VisualVM/jmxtrans 直连 Broker 的 JMX 端口观察请求处理率、请求队列、网络/磁盘、GC 等
    • Prometheus + Grafana:通过 JMX Exporter 暴露指标并可视化
    • 辅助工具:Kafdrop(Topic/消费者组可视化)、Kafka Offset Monitor(轻量查看滞后)
  • 结果示例与判读
    • 生产者示例输出:100000 records sent, 25000.0 records/sec (24.41 MB/sec), 15.2 ms avg latency, 293.0 ms max latency
      • 含义:吞吐约 25k 条/秒,平均延迟 15.2 ms,最大 293 ms;随时间稳定说明系统趋于稳定
    • 消费者示例输出:data.consumed.in.MB=1024.00, MB.sec=17.07, data.consumed.in.nMsg=1048576, nMsg.sec=17476.27, rebalance.time.ms=20, fetch.time.ms=60000
      • 含义:消费速率 17.07 MB/s(约 1.75 万条/秒),重平衡 20 ms,fetch 时间接近测试时长表示持续拉取

四 测试场景与参数建议

  • 吞吐优先(高吞吐配置)
    • acks=1,batch.size=131072,linger.ms=50,compression.type=lz4,buffer.memory=67108864
  • 低延迟优先(快速确认)
    • acks=1,batch.size=8192,linger.ms=0,compression.type=none
  • 端到端延迟
    • 生产端写入带时间戳(如 System.currentTimeMillis()),消费端计算当前时间差作为延迟分布
  • 扩展测试
    • 逐步增加分区数、并发生产者/消费者数量,观察吞吐是否近似线性扩展
    • 变更副本数(replication.factor)观察可用性/持久性与吞吐的权衡
  • 稳定性与瓶颈定位
    • 长时间运行(如 ≥1 小时)观察是否出现重平衡风暴、错误率上升、磁盘/网络饱和
    • 常见瓶颈:CPU(压缩/网络栈)、磁盘 I/O(顺序写/刷盘策略)、网络(带宽/包大小)、JVM GC(堆大小与停顿)

0