Kafka性能测试实战:从脚本使用到参数调优全解析

张开发
2026/4/6 22:53:17 15 分钟阅读

分享文章

Kafka性能测试实战:从脚本使用到参数调优全解析
1. Kafka性能测试入门指南第一次接触Kafka性能测试时我被各种专业术语和参数搞得晕头转向。后来在实际项目中反复实践才发现掌握Kafka性能测试其实就像学开车一样先了解基本操作再逐步深入高级技巧。Kafka官方提供的两个测试脚本——生产者性能测试脚本kafka-producer-perf-test.sh和消费者性能测试脚本kafka-consumer-perf-test.sh就是我们最趁手的工具。这两个脚本都存放在Kafka安装目录的bin文件夹下。生产者脚本主要测试吞吐量throughput、最大时延max-latency和平均时延avg-latency三个指标消费者脚本则侧重吞吐量和一些消费端特有指标。记得我第一次测试时犯了个低级错误——直接在Windows的Git Bash里运行这些脚本结果各种报错。后来才知道这些脚本是为Linux环境设计的在Windows上要么用WSL要么用原生的Linux系统。2. 生产者性能测试实战2.1 基础参数解析kafka-producer-perf-test.sh脚本有十几个参数但实际常用的就那几个。我整理了几个最核心的参数--topic指定测试用的主题名称建议单独创建一个测试专用topic--num-records要发送的消息总数根据测试需求设置--record-size每条消息的大小字节和--payload-file二选一--throughput限制每秒最大发送消息数设为-1表示不限制--producer-props直接指定生产者配置比如broker地址、压缩算法等举个例子如果要测试发送100万条1KB消息到本地Kafka集群命令是这样的bin/kafka-producer-perf-test.sh --topic perf-test \ --num-records 1000000 \ --record-size 1024 \ --throughput -1 \ --producer-props bootstrap.serverslocalhost:9092 compression.typelz42.2 测试结果解读执行后会输出类似这样的结果1000000 records sent, 45231.23 records/sec (44.17 MB/sec), 15.32 ms avg latency, 278.00 ms max latency这个结果告诉我们成功发送了100万条消息吞吐量达到45231条/秒约44MB/秒平均延迟15.32毫秒最大延迟278毫秒在实际项目中我遇到过吞吐量突然下降的情况。排查后发现是网络带宽被其他应用占用了。所以建议测试时确保测试环境干净避免其他程序干扰。3. 消费者性能测试详解3.1 关键参数配置消费者测试脚本kafka-consumer-perf-test.sh的参数更多但常用的也就几个--bootstrap-server指定broker地址必填--topic要消费的主题必填--messages要消费的消息总数必填--threads消费线程数默认10--fetch-size每次请求获取的数据量默认1MB一个典型的消费测试命令bin/kafka-consumer-perf-test.sh \ --bootstrap-server localhost:9092 \ --topic perf-test \ --messages 1000000 \ --threads 4 \ --fetch-size 10485763.2 结果分析方法消费者测试的输出比生产者复杂会包含多列数据time, threadId, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec 2023-08-20 14:30:00, 0, 1024.00, 102.40, 1000000, 100000.00重点看这几个指标MB.sec每秒消费的数据量MBnMsg.sec每秒消费的消息数fetch.time.msfetch操作的耗时在电商项目中我们发现当fetch-size从默认1MB调整到2MB时消费吞吐量提升了约30%。但继续增大到4MB后提升就不明显了反而增加了内存压力。4. 高级调优技巧4.1 分区数量优化分区数对性能影响很大。我们做过对比测试在3个broker的集群上3个分区吞吐量约45MB/s4个分区吞吐量约96MB/s提升113%5个分区吞吐量约92MB/s发现4个分区时性能最好。但要注意分区数不是越多越好超过某个临界点后性能反而会下降。4.2 压缩算法选择测试了三种常见压缩算法算法吞吐量(MB/s)CPU占用网络带宽gzip38.2高低snappy52.7中中lz456.4低中如果CPU资源充足推荐lz4如果网络带宽紧张可以考虑gzip。4.3 副本因子配置在可靠性要求不同的场景下实时聊天replication.factor1用户行为分析replication.factor2金融交易replication.factor3在3个broker的集群中设置replication.factor3时即使挂掉2个broker服务仍然可用。5. 业务场景配置模板5.1 实时消息场景适合在线聊天、游戏指令等acks0 retries0 compression.typelz4 linger.ms0 batch.size163845.2 流处理场景适合用户行为分析、日志处理acks1 retries3 compression.typesnappy linger.ms5 batch.size327685.3 金融交易场景适合支付、订单等关键业务acksall retries2147483647 compression.typegzip linger.ms20 batch.size65536 min.insync.replicas2在最近的一个物联网项目中我们根据设备上报数据的特性采用了流处理场景的配置将日均3亿条消息的延迟控制在500ms以内同时保证了99.9%的可靠性。

更多文章