更新时间:2024-12-12 GMT+08:00
分享

测试Kafka实例TPS

通过以下几个场景,测试不同实例规格的TPS。

  • 测试场景一(实例是否开启SASL):相同的Topic,实例分为开启SASL和未开启SASL
  • 测试场景二(同步/异步复制):相同的实例,不同复制机制的Topic
  • 测试场景三(是否同步落盘):相同的实例,不同落盘机制的Topic
  • 测试场景四(不同磁盘类型):相同的Topic,不同磁盘类型的实例
  • 测试场景五(不同分区数):相同的实例,不同分区数的Topic

测试环境

进行TPS测试前,您需要先构建如下的测试环境:

  1. 购买如表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. 购买实例后,创建如表2所示Topic,创建步骤请参考创建Kafka Topic
    表2 Topic参数

    名称

    是否同步复制

    是否同步落盘

    副本数

    分区数

    topic-01

    3

    30

    topic-02

    3

    30

    topic-03

    3

    30

    topic-04

    3

    3

    topic-05

    3

    12

    topic-06

    3

    100

  3. 获取测试工具。

    获取Kafka命令行工具2.7.2版本

  4. 购买客户端服务器。

    购买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

测试脚本

./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
  • bootstrap.servers:购买Kafka实例后,获取的Kafka实例的地址。
  • acks:消息主从同步策略,acks=1表示异步复制消息,acks=-1表示同步复制消息。
  • batch.size:每次批量发送消息的大小(单位为字节)。
  • linger.ms:两次发送时间间隔。
  • topic:创建Topic中设置的Topic名称。
  • num-records:总共需要发送的消息数。
  • record-size:每条消息的大小。
  • throughput:每秒发送的消息数。

测试结果

测试场景一(实例是否开启SASL):相同的Topic(30分区、3副本、异步复制、异步落盘),实例分为开启SASL和未开启SASL,测试结果如下:

表3 测试结果

实例规格

磁盘类型

代理数量

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时,测试结果如下:

表4 测试结果

实例规格

是否同步落盘

副本数

分区数

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,测试结果如下:

表5 测试结果

实例规格

是否同步复制

副本数

分区数

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副本、异步复制、异步落盘),不同磁盘类型的实例测试结果如下:

表6 测试结果

实例规格

代理数量

是否开启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测试结果如下:

表7 测试结果

实例规格

是否同步落盘

是否同步复制

副本数

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的性能通常会随之增加,当分区数达到一定程度后,继续增加分区数可能会导致性能下降。

相关文档