如何通过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.sec 、rebalance.time.ms 、fetch.time.ms 、消费者滞后(Consumer Lag)
Broker:请求处理率 、请求队列 、网络吞吐 、磁盘IO 、GC暂停
快速瓶颈定位与优化建议
CPU瓶颈:增加Broker数量、优化压缩(如lz4/snappy )、优化JVM参数
内存瓶颈:适度增大堆与缓冲区(如buffer.memory)、减少对象创建
磁盘I/O瓶颈:使用SSD 、增加日志目录、优化段大小与刷盘策略
网络瓶颈:提升带宽、增大批次与压缩、减少小消息频繁发送
监控与可视化
开启JMX并使用JConsole 查看Broker指标;使用Kafka Manager 等工具聚合查看集群与消费组状态、Lag等。