前言_BenchMark
- BenchMark是一个系统性能的测量工具,也可以看做是一种评价方式
- 主要测试负载的执行时间、传输速度、吞吐量、资源占用率等
- 对系统进行性能基准测试后,将得到基准数据作为性能指标的参照物,可以用于以下场景
1.任意一项变更为系统产生的影响
修改某项配置参数后(启用某项参数),系统的变化情况
2.系统环境的变更对系统性能产生的影响
3.在相同场景下,不同框架的系统性能表现的差异
- 一些大数据BenchMark工具:
1.Hibench:由Intel开发的针对Hadoop的基准测试工具
2.Berkeley BigDataBench:随着Spark的推出,由AMPLab开发的一套大数据基准测试工具
3.Hadoop GridMix:Hadoop自带的Benchmark,作为Hadoop自带的测试工具使用方便、负载经典,应用广泛
除此之外,有些大型的框架会自带BenchMark工具,方便进行测试。
1. Kafka生产者基准测试
分别使用Kafka自带的基准工具对Kafka Producer/Consumer进行性能基准测试
- 测试背景
需要对Kafka Producer在不同参数下的性能 - 性能指标
平均吞吐量(条/秒)、平均延时(毫秒)、平均吞吐率速度(MB/秒)
1.1 测试方法
使用Kafka基准测试工具kafka-producer-perf进行测试
此工具位于kafka/bin目录下
此工具的一些必要参数如下
./kafka-producer-perf-test.sh
--topic 指定topic
--num-records 指定生产数据量
--throughput 指定吞吐量
--record-size record数据大小
--producer-props key=value 指定producer配置
- 一个实例如下:
./kafka-producer-perf-test.sh
--topic louisvv
--num-records 5000000
--throughput -1
--record-size 200
--producer-props bootstrap.servers=192.168.137.100:9092,192.168.137.110:9092,192.168.137.120:9092 acks=1
- 测试参数
除了测试acks以及replication对kafka producer的吞吐量外,还对其他参数进行测试。
参数列表如下 - 默认设置
- 以5000万数据测试结果为准,该结果更加具有代表性
- 测试其他参数时,默认设置acks=1,partition数为5,replication数为2。
1.2 测试结果分析
1.2.1 acks作为变量
- acks作为变量,测试平均吞吐量,平均延时,平均吞吐速率,测试结果如下:
- 测试结果换算成图标如下
- 结论
- 在不考虑数据丢失等情况下,设置acks=1时,吞吐量最大。是acks=all的3.51倍。
- 在保证数据不丢失的情况下,需要选择使用acks=all,但是吞吐量会明显降低。
1.2.2 replication作为变量
- 设置Kafka的replication-factor为2、3,进行测试
- 测试结果如下:
- 图表如下:
- 结论:
replication数越多,吞吐量越低
1.2.3 batch作为变量
- 分别设置Kafka的batch-size批处理大小为1000,5000,8000,10000,100000,550000,600000进行测试
- 测试结果:
- 折线图如下
- 结论:
batch-size大小达到阀值时,会达到吞吐量峰值,
当batch-size大小超过阀值后,并不会提高性能。
1.2.4 数据压缩作为变量
- 分别设置Kafka的压缩格式为lz4、snappy、gzip,进行测试
- 测试结果:
- 条形图如下:
- 结论
- 使用snappy压缩格式,吞吐量最高
- 启用压缩的平均延时远小于不启用压缩的平均延时
- Gzip压缩格式,吞吐量最低,比默认不适用压缩吞吐量还低
1.2.5 record-size(消息长度)
- 分别设置record-size大小为100、200、500、1000进行测试
- 测试结果如下:
- 图标如下:
- 结论:
随着消息长度的增加,吞吐量逐渐减小,但平均吞吐速率会增大。
1.2.6 分区作为变量
- 分别设置partition为1、3、5进行测试
- 测试结果如下
- 图表如下:
- 结论
分区数越多,吞吐量越大
2. Kafka消费者基准测试
- 测试背景
需要测试Kafka Consumer在不同参数下的吞吐量 - 性能指标
平均吞吐量(条/秒)、平均延时(毫秒)、平均吞吐率速率(MB/秒)
2.1 测试方法
使用Kafka基准测试工具kafka-consumer-perf进行测试
这个工具位于kafka/bin目录下
这里仅简单介绍一下该工具的一些必要参数
./kafka-consumer-perf-test.sh
--topic 指定topic
--threads 指定线程数
--messages 指定消费数据条数
--broker-list kafka broker列表
- 一个实例如下:
./kafka-consumer-perf-test.sh
--topic louisvv
--threads 1
--messages 5000000
--broker-list 192.168.137.100:9092,192.168.137.110:9092,192.168.137.120:9092
- 测试参数
注意:replication并不会影响consumer的吞吐率,因为consumer只会从每个partition的leader读数据,而与replicaiton无关 - 默认设置
- 以5000万数据测试结果为准,该结果更加具有代表性默认设置
- 测试其他参数时,partition数为5,replication数为2
2.2 测试结果分析
2.2.1 以分区作为变量
- 分别设置partition为1、3、5进行测试
- 测试结果:
- 图表如下:
- 结论:
分区越多,吞吐量越高
2.2.2 以fetch-size作为变量
- 分别设置record-size大小为50000、100000、200000、300000、400000、450000、500000、550000、600000行测试
- 测试结果如下:
- 折线图如下:
- 结论
fetch-size大小达到一定阈值时,会达到吞吐量峰值,当fetch-size超过阈值后,不会提升性能
2.2.3 以replication作为变量
- 设置Kafka的replication-factor为2、3,进行测试
- 测试结果如下:
- 测试图表如下
- 结论
副本数越少,吞吐量越大。
2.2.4 以线程数作为变量
- 设置Kafka的consumer线程数为1、3、5、10、20、30,进行测试
- 测试结果:
- 测试图表入下:
- 结论:
提高consumer线程数,对吞吐量性能影响并不明显