全栈工程师开发手册 (作者:栾鹏)
架构系列文章
本次性能测试在正式环境下单台服务器上Kafka处理MQ消息能力进行压力测试。测试包括对Kafka写入MQ消息和消费MQ消息进行压力测试,根据10w、100w和1000w级别的消息处理结果,评估Kafka的处理性能是否满足项目需求。(该项目期望Kafka能够处理上亿级别的MQ消息)
测试使用Kafka自带的测试脚本,通过命令对Kafka发起写入MQ消息和Kafka消费MQ消息的请求。模拟不同数量级的MQ消息写入和MQ消息消费场景,根据Kafka的处理结果,评估Kafka是否满足处理亿级以上的消息的能力。
测试场景 |
MQ消息数 |
每秒写入消息数 |
记录大小(单位:字节) |
Kafka消息写入测试 |
10W |
2000条 |
1000 |
100W |
5000条 |
1000 |
|
1000W |
5000条 |
1000 |
测试场景 |
消费MQ消息数 |
Kafka消息消费测试 |
10W |
100W |
|
1000W |
验证带台服务器上Kafka写入消息和消费消息的能力,根据测试结果评估当前Kafka集群模式是否满足上亿级别的消息处理能力。
创建主题 bin/kafka-topics.sh --create --zookeeper 10.233.8.10 --replication-factor 1 --partitions 4 --topic test_perf 这里面使用的是集群ip,容器间访问,记得先获取一遍zookeeper的集群ip,这里多少个分片对应多少个 bin/kafka-topics.sh --zookeeper 10.233.8.10:2181 --list 查询所有主题 bin/kafka-topics.sh --zookeeper 10.233.8.10:2181 --describe --topic test_perf 查询topic的详细信息 删除主题 bin/kafka-topics.sh --delete --topic test_perf --zookeeper 10.233.8.10:2181
在服务器上使用Kafka自带的测试脚本,分别模拟10w、100w和1000w的消息写入请求,查看Kafka处理不同数量级的消息数时的处理能力,包括每秒生成消息数、吞吐量、消息延迟时间。Kafka消息吸入创建的topic命名为test_perf,使用命令发起消费该topic的请求,查看Kafka消费不同数量级别的消息时的处理能力。
测试项 |
压测消息数(单位:W) | 测试命令 |
写入MQ消息 |
10 | ./kafka-producer-perf-test.sh --topic test_perf --num-records 100000 --record-size 1000 --throughput 2000 --producer-props bootstrap.servers=10.233.8.14:9092 |
100 | ./kafka-producer-perf-test.sh --topic test_perf --num-records 1000000 --record-size 2000 --throughput 5000 --producer-props bootstrap.servers=10.150.30.60:9092 |
|
1000 | ./kafka-producer-perf-test.sh --topic test_perf --num-records 10000000 --record-size 2000 --throughput 5000 --producer-props bootstrap.servers=10.150.30.60:9092 |
|
消费MQ消息 |
10 | ./kafka-consumer-perf-test.sh --zookeeper localhost:2181 --topic test_perf --fetch-size 1048576 --messages 1000000 --threads 1 |
100 | ./kafka-consumer-perf-test.sh --zookeeper localhost:2181 --topic test_perf --fetch-size 1048576 --messages 10000000 --threads 1 |
|
1000 | ./kafka-consumer-perf-test.sh --zookeeper localhost:2181 --topic test_perf --fetch-size 1048576 --messages 10000000 --threads 1 |
主 机 |
数量 |
资 源 |
操作系统 |
MQ消息服务 |
1 |
硬件:8(核)-32768(M)-100(G) 软件:Kafka集群(Kafka_2.11-0.10.1.0) |
centos7.3 |
MQ消息处理
|
1 |
硬件:8(核)-32768(M)-100(G) 软件:Kafka集群(Kafka_2.11-0.10.1.0) |
centos7.3 |
测试机配置 |
1 |
硬件:8(核)-32768(M)-100(G) 软件:node(V6.11.3)运行环境、jdk1.8、tomcat8、nginx |
centos7.3 |
Kafka压测工具 |
Kafka自带压测脚本 |
本次测试针对Kafka消息处理的能力 进行压力测试,对Kafka集群服务器中的一台进行MQ消息服务的压力测试,关注Kafka消息写入的延迟时间是否满足需求。对Kafka集群服务器中的一台进行MQ消息处理的压力测试,验证Kafka的消息处理能力。
测试项 |
设置消息总数 |
设置单个消息大小 |
设置每秒发送消息数 |
实际写入消息数/秒 |
95%的消息延迟 |
写入MQ消息 |
10 |
1000 |
2000 |
1999.84 |
1 |
100 |
1000 |
5000 |
4999.84 |
1 |
|
1000 |
1000 |
5000 |
4999.99 |
1 |
写入10w消息压测结果
写入100w消息压测结果
写入1000w消息压测结果
–topic topic名称,本例为test_perf
–num-records 总共需要发送的消息数,本例为100000
–record-size 每个记录的字节数,本例为1000
–throughput 每秒钟发送的记录数,本例为5000
–producer-props bootstrap.servers=localhost:9092 (发送端的配置信息,本次测试取集群服务器中的一台作为发送端,可在kafka的config目录,以该项目为例:/usr/local/kafka/config;查看server.properties中配置的zookeeper.connect的值,默认端口:9092)
本例中写入100w条MQ消息为例,每秒平均向kafka写入了4.77MB的数据,大概是4999.875条消息/秒,每次写入的平均延迟为1毫秒,最大的延迟为647毫秒,1ms内占99%。
消费MQ消息 |
消费消息总数 |
共消费数据 |
每秒消费数据 |
每秒消费消息数 |
消费耗时 |
消费MQ消息 |
10 |
95.36 |
137 |
143899.3 |
0.695 |
100 |
953.66 |
177.19 |
185804.5 |
5.38 |
|
1000 |
9536.73 |
198.25 |
207878.6 |
48.11 |