1.环境准备
1)云机环境(三台云机环境一致)
2.测试方式
1)生产者测试
使用kafka自带工具%KAFKA_HOME%/bin/kafka-producer-perf-test.sh,可用参数可参考./bin/kafka-producer-perf-test.sh --help
在使用的过程中对不同的topic(拥有不同的分区数和复制数),设置不同的参数来进行测试
2)消费者测试
使用kafka自带工具%KAFKA_HOME%/bin/kafka-consumer-perf-test.sh,可用参数可参考./bin/kafka-consumer-perf-test.sh --help
在使用过程中对不同的topic(拥有不同的分区数和复制数),设置不同的参数来进行测试
3.数据准备
设置不同的topic,拥又不同的partitions 和 replication-factor数
笔者创建八个topic用于测试,分别是:
1)生产者
设置 --num-records 500000 --throughput 1000000 --producer-props bootstrap.servers=10.187.96.50:9092,
10.187.96.51:9092,10.187.96.52:9092(用户需设置自己的kafka集群地址及端口号)
2)消费者
设置 --messages 500000 --message-size 1024 --zookeeper 10.187.96.50:2181,10.187.96.51:2181,10.187.96.52:2181(用户需设置自己的zookeeper集群地址及端口号)
4.生产者测试及结果分析
1)不同record-size(单条消息体大小)下的测试
图表展示如下
(X轴:单消息体大小[1024,512,256,128,64,32],Y轴:记录数/秒)
:
结论:消息体越小,每秒生产的记录数越多
2)不同partition(topic分区数)下的测试
图表展示如下(X轴:分区数[1,2,3,4,6],Y轴:记录数/秒):
结论:随着分区数的增大,每秒生产数也相应增大,在partitions=3的时候达到最大,然后继续增加分区数,每秒生产数开始减少
3)不同replication-num(复制数)下的测试
图表展示如下
(X轴:分片复制数[1,2,3],Y轴:记录数/秒)
:
结论:分片复制数越多,每秒生产记录数越少(一般设置与broker数相同即可)
broker和producer的配置可影响生产记录数,参考参数如下:
5.消费者测试及结果分析
1)不同record-size(单条消息体大小)下的测试
图表展示如下(X轴:单条消息体大小[1024,512,256,64],Y轴:记录数/秒):
结论:单条消息体大小对每秒消费数据影响不大(都在38万/秒附近浮动)
图表展示如下(X轴:消费线程数[1,2,3,4],Y轴:记录数/秒):
结论:消费线程数越大,每秒消费数越多;当消费线程数大于分区数时,多余的线程无法消费到数据
图表展示如下(X轴:分区数[1,2,3,4,5,6],Y轴:记录数/秒):
结论:在一定范围内,分区数越大,每秒消费数越高;
PRESSURE_TEST_PART_3_REP_3最低?TODO
分区数持续增大,每秒记录数开始降低,降低原因可参考 http://blog.csdn.net/kwengelie/article/details/51150114
4)其他影响消费者性能的参数
参考:
https://www.cnblogs.com/xiaodf/p/6023531.html
https://www.cnblogs.com/wangb0402/p/6221626.html