You need to enable JavaScript to run this app.
导航
使用默认接入点进行压力测试
最近更新时间:2024.08.21 17:26:42首次发布时间:2024.08.21 17:26:42

本文介绍使用 Kafka 的默认接入点,对 Kafka 进行生产和消费压力测试。

测试建议

  • 为了提高吞吐量,建议创建 Topic 时设置分区数量 ≥ 3。因为 Kafka 实例的节点数量最少是 3,如果只有 1 个分区则分区会分布在一个 Broker 上面,会影响性能。
  • 由于 Kafka 是分区级别消息有序的,因此过多的分区也会影响生产性能,建议分区数不超过 6。
  • 为了保证压力测试的效果,需要多客户端模拟一定的并发,建议采用多台机器作为压测客户端(生产端),每台启动多个压测程序,提高并发。此外建议每 1s 启动一个生产者,避免同时启动所有生产者导致测试机器高负载。

前提条件

  • 已创建 Kafka 实例,并获取接入点信息。详细信息,请参见创建实例
  • 已创建 Topic。详细信息,请参见创建 Topic
  • 已购买云服务器 ECS 实例,并成功安装 JDK、配置环境变量。详细信息,请参见购买 ECS

压力测试

  1. 连接 ECS 实例。连接方式请参见连接 ECS 实例

  2. 在 ECS 实例中下载 Kafka 2.2.2 版本工具包。

    wget https://archive.apache.org/dist/kafka/2.2.2/kafka_2.11-2.2.2.tgz
    
  3. 解压开源 Kafka 2.2.2 版本工具包。

    tar -zxvf kafka_2.11-2.2.2.tgz 
    
  4. 进入解压后文件的./bin 目录下。

  5. 生产消息压力测试

    1. 执行以下命令,进行生产消息压力测试。

      ./kafka-producer-perf-test.sh --topic {Topic名称} --num-records 100000 --throughput 20000 --record-size 1000 --producer-props bootstrap.servers={默认接入点域名:端口}
      

      参数

      说明

      --topic

      指定目标 Topic 的名称,需要提前在 Kafka 控制台创建。

      --num-records

      发送的消息数量。

      --throughput

      每秒的吞吐量,即每秒发送多少条消息。
      如果设置为-1,则表示不限制每秒发送的消息数量。

      --record-size

      消息的大小,单位为 Byte。

      --producer-props

      Kafka 生产者相关的配置属性。

      • bootstrap.servers:Kafka 实例的接入点。请在控制台实例详情页面的服务访问区域中查看接入点信息。
    2. 查看压力测试结果。

      [root@iv-xxx5uo bin]# ./kafka-producer-perf-test.sh --topic topic-1 --num-records 100000 --throughput 20000 --record-size 1000 --producer-props bootstrap.servers=kafka-xxxc5y.kafka.ivolces.com:9092
      99949 records sent, 19981.8 records/sec (19.06 MB/sec), 8.8 ms avg latency, 159.0 ms max latency.
      100000 records sent, 19932.230417 records/sec (19.01 MB/sec), 8.78 ms avg latency, 159.00 ms max latency, 1 ms 50th, 84 ms 95th, 139 ms 99th, 155 ms 99.9th.
      

      分析:本例中一共写入 10w 条消息,每秒向 Kafka 写入了 19.01MB 的数据,平均是 19932.230417 条消息/秒,每次写入的平均延迟为 13.84 毫秒,最大的延迟为 159 毫秒。

  6. 消费消息压力测试

    1. 执行以下命令,开始消费压力测试。

      ./kafka-consumer-perf-test.sh --topic {Topic名称} --fetch-size 1048576 --messages 100000 --group {Group名称} --broker-list {默认接入点:端口} 
      

      参数

      说明

      --topic

      指定需要订阅的目标 Topic 的名称。

      --fetch-size

      一次请求提取的数据量 , 默认 1048576,单位为 Byte。

      --messages

      消费的消息数量。

      --group

      自定义设置 Group 的名称,无需提前在 Kafka 控制台上创建。

      --broker-list

      Kafka 实例的接入点。请在控制台实例详情页面的服务访问区域中查看接入点信息。

    2. 查看压力测试结果。

      [root@iv-xxx5uo bin]# ./kafka-consumer-perf-test.sh --topic topic-1 --fetch-size 1048576 --messages 100000 --group group-1 --broker-list kafka-xxxc5y.kafka.ivolces.com:9092
      start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec, rebalance.time.ms, fetch.time.ms, fetch.MB.sec, fetch.nMsg.sec
      2024-08-05 11:29:47:003, 2024-08-05 11:30:00:905, 95.3674, 6.8600, 100000, 7193.2096, 3038, 10864, 8.7783, 9204.7128
      

      执行命令后,返回如下类似结果,分析如下:

      • 开始测试时间 start.time:2024-08-05 11:29:47:003
      • 结束时间 end.time:2024-08-05 11:30:00:905
      • 最大吞吐率 data.consumed.in.MB:95.3674MB/s
      • 平均每秒消费 MB.sec:6.8600MB/s
      • 最大每秒消费条数 data.consumed.in.nMsg:100000条
      • 平均每秒消费条数 nMsg.sec:7193.2096条