更新时间:2025-08-21 GMT+08:00

测试Kafka生产速率和CPU消耗

本章节从批处理大小、是否跨AZ生产、副本数、同步/异步复制的维度进行分布式消息服务Kafka版的性能测试,对比客户端消息生产速率和服务端CPU消耗,得出性能测试结果。

  • 测试场景一(批处理大小):相同的Kafka实例和Topic,不同的消息大小
  • 测试场景二(是否跨AZ生产):相同的Kafka实例和Topic,生产客户端和服务端在不同的AZ中
  • 测试场景三(副本数):相同的Kafka实例,不同的Topic副本数
  • 测试场景四(同步/异步复制):相同的Kafka实例,不同复制机制的Topic
表1 测试参数

分区数

副本数

是否同步复制

batch.size

是否跨AZ生产

3

1

1KB

3

1

16KB

3

1

1KB

3

3

1KB

3

3

1KB

测试环境

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

  1. 购买一个Kafka实例,参数信息如下,其他参数保持默认,购买方法请参考购买Kafka实例
    表2

    参数名称

    示例取值

    区域

    中国-香港

    可用区

    可用区1

    版本

    2.7

    部署架构

    集群

    代理规格

    kafka.2u4g.cluster

    代理数量

    3

    单代理存储空间

    超高I/O,200GB

    虚拟私有云

    选择虚拟私有云

    子网

    选择子网

    安全组

    选择安全组

    访问方式

    保持默认

    实例名称

    kafka-test

    企业项目

    default

    购买完成后,在实例详情页获取Kafka实例的内网明文连接地址。

  2. 在购买的Kafka实例中,创建如下参数的3个Topic,具体步骤请参考创建Kafka Topic
    • Topic-01:3分区1副本,异步复制
    • Topic-02:3分区3副本,异步复制
    • Topic-03:3分区3副本,同步复制
  3. 获取测试工具。

    获取Kafka命令行工具2.7.2版本

  4. 购买客户端服务器。
    购买如下参数的2台ECS服务器,具体步骤请参考购买弹性云服务器
    • 区域、可用区、虚拟私有云、子网、安全组与Kafka实例保持一致,规格为4U8G,Linux系统的ECS。
    • 区域、虚拟私有云、子网、安全组与Kafka实例保持一致,“可用区”为“可用区2”,规格为4U8G,Linux系统的ECS。

    购买完成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={batch.size} linger.ms=0 --topic {Topic名称} --num-records {num-records} --record-size 1024 --throughput 102400
表3 脚本参数说明

参数名称

说明

bootstrap.servers

购买Kafka实例中获取的Kafka实例的地址。

acks

消息主从同步策略,acks=1表示异步复制消息,acks=-1表示同步复制消息。

batch.size

每次批量发送消息的大小(单位为字节)。

linger.ms

两次发送时间间隔。

topic

创建Topic中设置的Topic名称。

num-records

总共需要发送的消息数。

record-size

每条消息的大小。

throughput

每秒发送的消息数。

测试步骤

测试结果

表4 测试结果

分区数

副本数

是否同步复制

batch.size

是否跨AZ生产

客户端消息生产速率

服务端CPU消耗(broker-0)

服务端CPU消耗(broker-1)

服务端CPU消耗(broker-2)

3

1

1KB

34128

58.10%

56.70%

53.30%

3

1

16KB

102399

24.10%

25.00%

23.30%

3

1

1KB

8523

17.20%

16.70%

18.80%

3

3

1KB

3981

60.00%

55.20%

50.00%

3

3

1KB

14468

86.70%

80.60%

86.20%

通过上表的测试结果,得出以下结论,仅供参考:

  • 生产请求的batch.size变大16倍时,客户端消息生产速率增加,服务端CPU消耗减少。
  • 同AZ生产和跨AZ生产相比,客户端消息生产速率增加,服务端CPU消耗也随之增加。
  • 副本从1变成3时,客户端消息生产速率下降较多,服务端CPU消耗增加。
  • 异步复制的Topic和同步复制的Topic相比,客户端消息生产速率增加,服务端CPU消耗也随之增加。