测试Kafka实例TPS
通过以下几个场景,测试不同实例规格的TPS。
- 测试场景一(实例是否开启SASL):相同的Topic,实例分为开启SASL和未开启SASL
- 测试场景二(同步/异步复制):相同的实例,不同复制机制的Topic
- 测试场景三(是否同步落盘):相同的实例,不同落盘机制的Topic
- 测试场景四(不同磁盘类型):相同的Topic,不同磁盘类型的实例
- 测试场景五(不同分区数):相同的实例,不同分区数的Topic
测试环境
进行TPS测试前,您需要先构建如下的测试环境:
- 购买如表1所示实例,购买步骤请参考购买Kafka实例。
表1 实例参数 名称
代理数量
规格
是否开启SASL
磁盘类型
kafka-01
3
kafka.2u4g.cluster
是
超高I/O
kafka-02
3
kafka.4u8g.cluster
是
超高I/O
kafka-03
3
kafka.8u16g.cluster
是
超高I/O
kafka-04
3
kafka.12u24g.cluster
是
超高I/O
kafka-05
3
kafka.16u32g.cluster
是
超高I/O
kafka-06
3
kafka.2u4g.cluster
否
超高I/O
kafka-07
3
kafka.4u8g.cluster
否
超高I/O
kafka-08
3
kafka.8u16g.cluster
否
超高I/O
kafka-09
3
kafka.12u24g.cluster
否
超高I/O
kafka-10
3
kafka.16u32g.cluster
否
超高I/O
kafka-11
3
kafka.2u4g.cluster
否
高I/O
kafka-12
3
kafka.4u8g.cluster
否
高I/O
kafka-13
3
kafka.8u16g.cluster
否
高I/O
kafka-14
3
kafka.12u24g.cluster
否
高I/O
kafka-15
3
kafka.16u32g.cluster
否
高I/O
购买完成后,在实例详情页获取Kafka实例的内网明文连接地址。
- 购买实例后,创建如表2所示Topic,创建步骤请参考创建Kafka Topic。
- 获取测试工具。
- 购买客户端服务器。
购买1台ECS服务器(区域、可用区、虚拟私有云、子网、安全组与Kafka实例保持一致,Linux系统),具体步骤请参考购买弹性云服务器。
购买完成ECS后,需要在ECS中完成以下配置:
- 安装Java JDK,并配置JAVA_HOME与PATH环境变量。
export JAVA_HOME=/root/jdk1.8.0_231 export PATH=$JAVA_HOME/bin:$PATH
- 下载Kafka命令行工具2.7.2版本,并解压。
tar -zxf kafka_2.12-2.7.2.tgz
- 安装Java JDK,并配置JAVA_HOME与PATH环境变量。
测试脚本
./kafka-producer-perf-test.sh --producer-props bootstrap.servers=${连接地址} acks=1 batch.size=16384 linger.ms=10 --topic ${Topic名称} --num-records 10000000 --record-size 1024 --throughput -1 --producer.config ../config/producer.properties
测试结果
测试场景一(实例是否开启SASL):相同的Topic(30分区、3副本、异步复制、异步落盘),实例分为开启SASL和未开启SASL,测试结果如下:
实例规格 |
磁盘类型 |
代理数量 |
TPS(开启SASL) |
TPS(未开启SASL) |
---|---|---|---|---|
kafka.2u4g.cluster |
超高I/O |
3 |
100000 |
280000 |
kafka.4u8g.cluster |
超高I/O |
3 |
170000 |
496000 |
kafka.8u16g.cluster |
超高I/O |
3 |
200000 |
730000 |
kafka.12u24g.cluster |
超高I/O |
3 |
320000 |
790000 |
kafka.16u32g.cluster |
超高I/O |
3 |
360000 |
1000000 |
结论:在Topic相同的情况下,生产消息到规格相同、接入方式不同的Kafka实例,未开启SASL的实例TPS高于开启SASL的实例TPS。
测试场景二(同步/异步复制):相同的实例(超高I/O、3个代理、未开启SASL),不同复制机制的Topic,生产者进程数为3时,测试结果如下:
实例规格 |
是否同步落盘 |
副本数 |
分区数 |
TPS(同步复制) |
TPS(异步复制) |
---|---|---|---|---|---|
kafka.2u4g.cluster |
否 |
3 |
30 |
100000 |
280000 |
kafka.4u8g.cluster |
否 |
3 |
30 |
230000 |
496000 |
kafka.8u16g.cluster |
否 |
3 |
30 |
342000 |
730000 |
kafka.12u24g.cluster |
否 |
3 |
30 |
383000 |
790000 |
kafka.16u32g.cluster |
否 |
3 |
30 |
485000 |
1000000 |
结论:生产消息到同一个Kafka实例的不同Topic中,Topic除了复制机制,其他参数相同,异步复制Topic的TPS高于同步复制Topic的TPS。
测试场景三(是否同步落盘):相同的实例(超高I/O、3个代理、未开启SASL),不同落盘机制的Topic,测试结果如下:
实例规格 |
是否同步复制 |
副本数 |
分区数 |
TPS(同步落盘) |
TPS(异步落盘) |
---|---|---|---|---|---|
kafka.2u4g.cluster |
否 |
3 |
30 |
30000 |
280000 |
kafka.4u8g.cluster |
否 |
3 |
30 |
32500 |
496000 |
kafka.8u16g.cluster |
否 |
3 |
30 |
36100 |
730000 |
kafka.12u24g.cluster |
否 |
3 |
30 |
37400 |
790000 |
kafka.16u32g.cluster |
否 |
3 |
30 |
40400 |
1000000 |
结论:生产消息到同一个Kafka实例的不同Topic中,Topic除了落盘机制,其他参数相同,异步落盘Topic的TPS远远高于同步落盘Topic的TPS。
测试场景四(不同磁盘类型):相同的Topic(30分区、3副本、异步复制、异步落盘),不同磁盘类型的实例,测试结果如下:
实例规格 |
代理数量 |
是否开启SASL |
TPS(高I/O) |
TPS(超高I/O) |
---|---|---|---|---|
kafka.2u4g.cluster |
3 |
否 |
110000 |
250000 |
kafka.4u8g.cluster |
3 |
否 |
135000 |
380000 |
kafka.8u16g.cluster |
3 |
否 |
213000 |
480000 |
kafka.12u24g.cluster |
3 |
否 |
240000 |
577000 |
kafka.16u32g.cluster |
3 |
否 |
280000 |
840000 |
结论:在Topic相同的情况下,生产消息到规格相同、磁盘类型不同的Kafka实例,超高I/O的实例TPS高于高I/O的实例TPS。
测试场景五(不同分区数):相同的实例(超高I/O、3个代理、未开启SASL),不同分区数的Topic,测试结果如下:
实例规格 |
是否同步落盘 |
是否同步复制 |
副本数 |
TPS(3分区) |
TPS(12分区) |
TPS(100分区) |
---|---|---|---|---|---|---|
kafka.2u4g.cluster |
否 |
否 |
3 |
250000 |
260000 |
250000 |
kafka.4u8g.cluster |
否 |
否 |
3 |
330000 |
280000 |
260000 |
kafka.8u16g.cluster |
否 |
否 |
3 |
480000 |
410000 |
340000 |
kafka.12u24g.cluster |
否 |
否 |
3 |
570000 |
750000 |
520000 |
kafka.16u32g.cluster |
否 |
否 |
3 |
840000 |
1000000 |
630000 |
结论:生产消息到同一个Kafka实例的不同Topic中,Topic除了分区数量,其他参数相同。随着分区数的增加,Kafka的性能通常会随之增加,当分区数达到一定程度后,继续增加分区数可能会导致性能下降。