前言_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的吞吐量外,还对其他参数进行测试。
    参数列表如下
  • 默认设置
  1. 以5000万数据测试结果为准,该结果更加具有代表性
  2. 测试其他参数时,默认设置acks=1,partition数为5,replication数为2。

1.2 测试结果分析

1.2.1 acks作为变量

  • acks作为变量,测试平均吞吐量,平均延时,平均吞吐速率,测试结果如下:
  • 测试结果换算成图标如下
  • 结论
  1. 在不考虑数据丢失等情况下,设置acks=1时,吞吐量最大。是acks=all的3.51倍。
  2. 在保证数据不丢失的情况下,需要选择使用acks=all,但是吞吐量会明显降低。

1.2.2 replication作为变量

  • 设置Kafka的replication-factor为2、3,进行测试
  • 测试结果如下:

单节点kafka 吞吐量 单机kafka 吞吐量测试_Kafka性能基准测试

  • 图表如下:
  • 结论:
    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,进行测试
  • 测试结果:
  • 条形图如下:
  • 结论
  1. 使用snappy压缩格式,吞吐量最高
  2. 启用压缩的平均延时远小于不启用压缩的平均延时
  3. 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无关
  • 默认设置
  1. 以5000万数据测试结果为准,该结果更加具有代表性默认设置
  2. 测试其他参数时,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线程数,对吞吐量性能影响并不明显