2019独角兽企业重金招聘Python工程师标准>>>
一 机器部署
1、机器组成
7台机器,均为16G内存
每台服务器均有4个CPU,2核
2、运行环境配置
3、刷盘方式
每台机器master机器均采用异步刷盘方式
二 性能评测
1、评测目的
多线程环境下,测试producer端的TPS 和 consumer端的TPS。
2、评测指标
(1)生产者producer
TPS、线程个数、发送成功数量、发送失败数量、接收成功数量、接收失败数量、发送消息成功总耗时。
(2)消费者consumer
TPS、接收消息总数、消息存储总耗时,消息存储平均耗时、消息消费总耗时、消息消费平均耗时。
3、评测逻辑
(1)固定消息长度,producer端发送消息body的字符串默认100字符长度。
(2)输入不同的线程数,产生不同组的producer,记录发送消息的TPS、发送成功数和消息消费的TPS、消费成功数等等。
(3)根据多组测试数据,分析平均的生产TPS和平均消费TPS。
4、评测步骤
(1)创建性能测试的topic,名称为BenchmarkTopicTest。 队列个数默认8个。
(2)输入线程数、消息长度、是否开启message的key值,并做表格记录TPS。
(3)针对特定场景,保持线程数不变,增加消息message的size,记录producer端和consumer端的TPS,并做表格记录。
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
5、评测过程
(1)第一组 线程个数1,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 450 | 450 | 1 | 128 | False |
producer端发送记录
consumer端消费记录
(2)第二组 线程个数10,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 3300 | 3250 | 10 | 128 | False |
producer端发送记录
consumer端消费记录
(3)第三组 线程个数32,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 8000 | 7900 | 32 | 128 | False |
producer端发送记录
consumer端消费记录
(4)第四组 线程个数50,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 11400 | 11300 | 50 | 128 | False |
producer端发送记录
consumer端消费记录
(5)第五组 线程个数64,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置message的key值 |
1 | 17300 | 18000 | 64 | 128 | False |
producer端发送记录
consumer端消费记录
(6)第六组 线程个数72,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置message的key值 |
1 | 18000 | 18200 | 72 | 128 | False |
producer端发送记录
consumer端消费记录
(7)第七组 线程个数80,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 19000 | 20000 | 80 | 128 | False |
producer端发送记录
consumer端消费记录
(8)第八组 线程个数90,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 20000 | 20000 | 90 | 128 | True |
producer端发送记录
consumer端消费记录
(9)第九组 线程个数100,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 21000 | 21000 | 100 | 128 | False |
producer端发送记录
consumer端消费记录
(10)第十组 线程个数160,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 24000 | 23000 | 160 | 128 | false |
producer端发送记录
consumer端消费记录
(11)第十一组线程个数320,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 28000 | 27500 | 320 | 128 | false |
producer端发送记录
consumer端消费记录
(12)第十二组 线程个数640,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 29500 | 30000 | 640 | 128 | false |
producer端发送记录
consumer端消费记录
(13)第十三组 线程个数1000,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 30000 | 29000 | 1000 | 128 | false |
producer端发送记录
consumer端消费记录
(14)第十四组 线程个数2000,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 32000 | 31000 | 2000 | 128 | false |
producer端发送记录
consumer端消费记录
(15)第十五组 线程个数3200,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 35300 | 35000 | 3200 | 128 | false |
producer端发送记录
consumer端消费记录
(16)第十六组 线程个数5000,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 36400 | 36000 | 5000 | 128 | false |
producer端发送记录
consumer端消费记录
(17)第十七组 线程个数6400,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 36500 | 36100 | 6400 | 128 | false |
producer端发送记录
consumer端消费记录
(7)第六组 线程个数100,消息长度固定128,不配置message的key值
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 17800 | 17500 | 100 | 128 | True |
producer端发送记录
consumer端消费记录
- 第六组 线程个数100,消息长度固定1280,配置topic的key值为时间戳
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 14000 | 14000 | 100 | 1280 | True |
producer端发送记录
consumer端消费记录
(9)第六组 线程个数100,消息长度固定12800,配置message的key值为时间戳
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 8800 | 9200 | 100 | 12800 | True |
producer端发送记录
consumer端消费记录
(10)第六组 线程个数100,消息长度固定128000,配置message的key值为时间戳
编号 | TPS (Producer) | TPS (Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 1300 | 880 | 100 | 128000 | True |
producer端发录
consumer端消费记录
6、分析结果如下:
保持消息长度为128,不配置message消息的key值,结果如下
编号 | TPS(Producer) | TPS(Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 450 | 450 | 1 | 128 | FALSE |
2 | 3300 | 3250 | 10 | 128 | FALSE |
3 | 8000 | 7900 | 32 | 128 | FALSE |
4 | 11400 | 11300 | 50 | 128 | FALSE |
5 | 17300 | 18000 | 64 | 128 | FALSE |
6 | 18000 | 18200 | 72 | 128 | FALSE |
7 | 18000 | 20000 | 80 | 128 | FALSE |
8 | 20000 | 20000 | 90 | 128 | FALSE |
9 | 21000 | 21000 | 100 | 128 | FALSE |
10 | 24000 | 23000 | 100 | 128 | FALSE |
11 | 28000 | 27500 | 100 | 1280 | FALSE |
12 | 29500 | 30000 | 100 | 12800 | FALSE |
13 | 30000 | 29000 | 100 | 128000 | FALSE |
14 | 24000 | 23000 | 160 | 128 | FALSE |
15 | 28000 | 27500 | 320 | 128 | FALSE |
16 | 29500 | 30000 | 640 | 128 | FALSE |
17 | 30000 | 29000 | 1000 | 128 | FALSE |
18 | 32000 | 31000 | 2000 | 128 | FALSE |
19 | 35300 | 35000 | 3200 | 128 | FALSE |
20 | 36400 | 36000 | 5000 | 128 | FALSE |
21 | 36500 | 36100 | 6400 | 128 | FALSE |
7、保持线程数为100,逐步增大消息body长度,配置message消息的key值为时间戳
编号 | TPS(Producer) | TPS(Consumer) | 线程数 | 消息长度 | 是否配置 message的key值 |
1 | 17800 | 17500 | 100 | 128 | TRUE |
2 | 14000 | 14000 | 100 | 1280 | TRUE |
3 | 8800 | 9200 | 100 | 12800 | TRUE |
4 | 1300 | 880 | 100 | 128000 | TRUE |
三 评测结果
1、随着线程数增加,producer端和consumer端的TPS均保持逐步增加的趋势,线程数目约等于100的时候,producer端的生产TPS、consumer端的消费TPS基本保持一致。
- 线程数目大于3200之后,producer端的生产TPS基本稳定在36000左右,后续几乎不在上升。同时consumer端的TPS略微低于producer端,但也同样稳定在35000上下。
3、保持线程数100不变,逐步增加消息body的size,producer端和consumer端的TPS均呈现下降趋势,且producer端的下降率高于consumer端。
说明随着消息body的增加,RocketMQ存储消息所需要的时间越来越多,导致producer的TPS下降。 Consumer端消费消息,网络传输带来的时间损耗整体较低,所以反而consumer端的TPS下降并不是特别快。