Kafka压力测试(写入MQ消息压测和消费MQ消息压测)

全栈工程师开发手册 (作者:栾鹏)
架构系列文章

1.测试目的

       本次性能测试在正式环境下单台服务器上Kafka处理MQ消息能力进行压力测试。测试包括对Kafka写入MQ消息和消费MQ消息进行压力测试,根据10w、100w和1000w级别的消息处理结果,评估Kafka的处理性能是否满足项目需求。(该项目期望Kafka能够处理上亿级别的MQ消息)

2.测试范围及方法

2.1测试范围概述

  测试使用Kafka自带的测试脚本,通过命令对Kafka发起写入MQ消息和Kafka消费MQ消息的请求。模拟不同数量级的MQ消息写入和MQ消息消费场景,根据Kafka的处理结果,评估Kafka是否满足处理亿级以上的消息的能力。

2.2性能测试场景设计

2.2.1Kafka写入消息压力测试

测试场景

MQ消息数

每秒写入消息数

记录大小(单位:字节)

Kafka消息写入测试

10W

2000条

1000

100W

5000条

1000

1000W

5000条

1000

2.2.2Kafka消费消息压力测试

测试场景

消费MQ消息数

Kafka消息消费测试

10W

100W

1000W

2.3******测试方法简要描述******

2.3.1测试目的

    验证带台服务器上Kafka写入消息和消费消息的能力,根据测试结果评估当前Kafka集群模式是否满足上亿级别的消息处理能力。

2.3.2测试方法

创建主题
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

  • 脚本执行目录:服务器上安装Kafka的bin目录;

3.测试环境

3.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

3.2 测试工具

Kafka压测工具

Kafka自带压测脚本

4.测试结果

4.1******测试结果说明******

本次测试针对Kafka消息处理的能力 进行压力测试,对Kafka集群服务器中的一台进行MQ消息服务的压力测试,关注Kafka消息写入的延迟时间是否满足需求。对Kafka集群服务器中的一台进行MQ消息处理的压力测试,验证Kafka的消息处理能力。

4.2测试结果

4.2.1写入MQ消息

测试项

设置消息总数
(单位:w)

设置单个消息大小
(单位:字节)

设置每秒发送消息数

实际写入消息数/秒

95%的消息延迟
(单位:ms)

写入MQ消息

10

1000

2000

1999.84

1

100

1000

5000

4999.84

1

1000

1000

5000

4999.99

1

  • 压测结果截图
  1. 写入10w消息压测结果 这里写图片描述

  2. 写入100w消息压测结果 这里写图片描述

  3. 写入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)

  • MQ消息写入测试结果解析:

本例中写入100w条MQ消息为例,每秒平均向kafka写入了4.77MB的数据,大概是4999.875条消息/秒,每次写入的平均延迟为1毫秒,最大的延迟为647毫秒,1ms内占99%。

4.2.2消费MQ消息

消费MQ消息

消费消息总数
(单位:w)

共消费数据
(单位:M)

每秒消费数据
(单位:M)

每秒消费消息数

消费耗时
(单位:s)

消费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

  • 压测结果截图
  1. 消费10w消息压测结果这里写图片描述
  2. 消费100w消息压测结果这里写图片描述
  3. 消费1000w消息压测结果这里写图片描述
  • kafka-consumer-perf-test.sh 脚本命令的参数为:
    –zookeeper 指定zookeeper的链接信息,本例为localhost:2181 ;
    –topic 指定topic的名称,本例为test_perf,即4.2.1中写入的消息;
    –fetch-size 指定每次fetch的数据的大小,本例为1048576,也就是1M
    –messages 总共要消费的消息个数,本例为1000000,100w
  • 以本例中消费100w条MQ消息为例总共消费了953.66M的数据,每秒消费数据大小为177.19M,总共消费了10000004条消息,每秒消费185804.53条消息。

5.结果分析

  •       根据4.2.测试结果,可以看出在单台服务器上,写入MQ消息设置5000条/秒时,消息写入及时,95%的消息延迟时间小于等于1ms,在可接受范围内;Kafka消费MQ消息时,1000W待处理消息的处理能力在每秒20w条以上,处理结果理想。
  •   根据Kafka处理10w、100w和1000w级的消息时的处理能力,可以评估出Kafka集群服务,是否有能力处理上亿级别的消息。
  • 本次测试是在正式环境集群服务中的单台服务器上进行,基本不需要考虑网络带宽的影响。所以单台服务器的测试结果,对评估集群服务是否满足上线后实际应用的需求,很有参考价值。