温馨提示×

如何通过Linux进行Kafka性能测试

小樊
36
2026-01-01 18:09:21
栏目: 智能运维

Linux下Kafka性能测试实操指南

一 工具与前置准备

  • 使用Kafka发行包自带的基准测试脚本:
    • 生产者:kafka-producer-perf-test.sh
    • 消费者:kafka-consumer-perf-test.sh
    • 其他辅助:kafka-verifiable-producer.sh / kafka-verifiable-consumer.sh(功能验证)、trogdor.sh(分布式压测框架,一般用户用不到)
  • 准备测试Topic(示例):
    • 建议选择与并发度匹配的分区数,副本数按可靠性设定(副本会提升可靠性但增加IO与网络开销)
    • 示例命令:
      • 创建Topic(新版接口优先使用bootstrap-server):
        • bin/kafka-topics.sh --create --topic test_topic --partitions 10 --replication-factor 3 --bootstrap-server broker1:9092,broker2:9092,broker3:9092
      • 如需兼容老环境也可用Zookeeper方式:
        • bin/kafka-topics.sh --create --topic test_topic --partitions 10 --replication-factor 3 --zookeeper zk1:2181,zk2:2181,zk3:2181
  • 认证与安全(如启用SASL/Kerberos):
    • 准备客户端配置文件(如:/usr/local/service/kafka/config/kafka-client-properties.conf),内容示例:
      • security.protocol=SASL_PLAINTEXT
      • sasl.mechanism=GSSAPI
      • sasl.kerberos.service.name=hadoop
      • sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab=“/var/krb5kdc/emr.keytab” principal=“kafka/1xx.xx.xx.117@TBDS-xxx”;
    • 在测试命令中通过**–producer.config / --consumer.config–producer-props**传入。

二 生产者压测步骤与关键参数

  • 常用参数说明(生产者)
    • –topic:目标Topic
    • –num-records:发送的总记录数
    • –record-size:单条消息大小(字节)
    • –throughput:限流阈值(条/秒),设为**-1**表示不限速
    • –producer-props / --producer.config:客户端配置(如bootstrap.servers、acks、压缩、批处理等)
    • –print-metrics:测试结束打印指标
    • –transactional-id / --transaction-duration-ms:事务相关(可选)
  • 示例命令
    • 基础不限速(示例:10,000,000条、100字节、acks=1)
      • bin/kafka-producer-perf-test.sh --topic test_topic --num-records 10000000 --record-size 100 --throughput -1 --producer-props bootstrap.servers=broker1:9092,broker2:9092,broker3:9092 acks=1
    • 开启压缩与批处理(示例:1,000,000条、1024字节、acks=1、lz4、linger、较大batch)
      • bin/kafka-producer-perf-test.sh --topic test_topic --num-records 1000000 --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
    • 带认证配置
      • bin/kafka-producer-perf-test.sh --topic test_topic --num-records 1000000 --record-size 100 --throughput -1 --producer.config /usr/local/service/kafka/config/kafka-client-properties.conf
  • 结果解读(示例输出)
    • 示例:50000000 records sent, 645103.022953 records/sec (184.57 MB/sec), 149.40 ms avg latency, 969.00 ms max latency, 5 ms 50th, 607 ms 95th, 750 ms 99th, 853 ms 99.9th.
    • 关注:每秒记录数(records/sec)、每秒字节数(MB/sec)、平均/分位延迟(ms)。

三 消费者压测步骤与关键参数

  • 常用参数说明(消费者)
    • –bootstrap-server / --broker-list:Broker列表
    • –topic:目标Topic
    • –messages:要消费的总消息数
    • –threads:消费线程数(并发)
    • –fetch-size:每次拉取大小(字节)
    • –group:消费者组ID
    • –print-metrics:打印指标
  • 示例命令
    • 单线程
      • bin/kafka-consumer-perf-test.sh --bootstrap-server broker1:9092,broker2:9092,broker3:9092 --topic test_topic --messages 50000000 --threads 1 --fetch-size 1048576
    • 多线程
      • bin/kafka-consumer-perf-test.sh --bootstrap-server broker1:9092,broker2:9092,broker3:9092 --topic test_topic --messages 50000000 --threads 8 --fetch-size 1048576
    • 带认证配置
      • bin/kafka-consumer-perf-test.sh --bootstrap-server broker1:9092,broker2:9092,broker3:9092 --topic test_topic --messages 50000000 --threads 1 --consumer.config /usr/local/service/kafka/config/kafka-client-properties.conf
  • 结果解读(示例输出)
    • 示例:start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec, rebalance.time.ms, fetch.time.ms, fetch.MB.sec, fetch.nMsg.sec
    • 关注:MB.sec(吞吐MB/s)、nMsg.sec(吞吐条/s)、rebalance.time.ms(再均衡耗时)、fetch.time.ms(拉取耗时)。

四 端到端延迟测试

  • 思路:在消息中携带发送时间戳,消费者计算当前时间减去时间戳得到端到端延迟,可对P50/P95/P99进行分析。
  • 快速做法(Java示例要点)
    • 生产者:发送记录时放入key/value的时间戳(如System.currentTimeMillis()),并使用合适的acks与批量配置
    • 消费者:poll到记录后计算latency = now - record.timestamp,汇总分布
  • 适用场景:评估在不同acks、批量、压缩、分区数下的延迟-吞吐权衡。

五 结果分析与瓶颈定位

  • 关键指标
    • 生产者:吞吐量(records/sec、MB/sec)平均/分位延迟(ms)、批处理与压缩效果
    • 消费者:MB.sec、nMsg.secrebalance.time.msfetch.time.ms、消费者滞后(Consumer Lag)
    • Broker:请求处理率请求队列网络吞吐磁盘IOGC暂停
  • 快速瓶颈定位与优化建议
    • CPU瓶颈:增加Broker数量、优化压缩(如lz4/snappy)、优化JVM参数
    • 内存瓶颈:适度增大堆与缓冲区(如buffer.memory)、减少对象创建
    • 磁盘I/O瓶颈:使用SSD、增加日志目录、优化段大小与刷盘策略
    • 网络瓶颈:提升带宽、增大批次与压缩、减少小消息频繁发送
  • 监控与可视化
    • 开启JMX并使用JConsole查看Broker指标;使用Kafka Manager等工具聚合查看集群与消费组状态、Lag等。

0