You need to enable JavaScript to run this app.
文档中心
消息队列 Kafka版

消息队列 Kafka版

复制全文
下载 pdf
对 Kafka 进行生产和消费压力测试
使用 SASL_SSL 接入点进行压力测试
复制全文
下载 pdf
使用 SASL_SSL 接入点进行压力测试
本文介绍使用 Kafka 的 SASL_SSL 接入点,对 Kafka 进行生产和消费压力测试。​
测试建议​
  • 为了提高吞吐量,建议创建 Topic 时设置分区数量 ≥ 3。因为 Kafka 实例的节点数量最少是 3,如果只有 1 个分区则分区会分布在一个 Broker 上面,会影响性能。​
  • 由于 Kafka 是分区级别消息有序的,因此过多的分区也会影响生产性能,建议分区数不超过 6。​
  • 为了保证压力测试的效果,需要多客户端模拟一定的并发,建议采用多台机器作为压测客户端(生产端),每台启动多个压测程序,提高并发。此外建议每 1s 启动一个生产者,避免同时启动所有生产者导致测试机器高负载。​
前提条件​
  • 已创建 Kafka 实例,并获取接入点信息。详细信息请参见创建实例。​
  • 已购买云服务器 ECS 实例,并成功安装 JDK、配置环境变量。详细信息请参见购买 ECS。​
  • 需要使用 SASL 安全机制连接实例时,需要提前创建 PLAIN 或 SCRAM 类型的 SASL 用户。详细信息请参见创建 SASL 用户。​
注意​
使用 SASL_SSL 接入点连接 Kafka 实例,会通过 SSL 证书对消息进行鉴权和加密。无论通过公网还是私网使用 SASL_SSL 接入点访问 Kafka 实例,客户端元数据均通过 IP 进行连接,证书中通常不包含该 IP,可能出现 certificate verify failed 报错。为避免上述报错,建议在客户端统一配置参数(本文档以 Java SDK 为例,参数为: ssl.endpoint.identification.algorithm= ),其他语言客户端可以参考开源官方配置,以跳过证书域名校验。​
压力测试​
  1. 连接 ECS 实例。​
  1. 在 ECS 实例中下载 Kafka 2.2.2 版本工具包。​
  • ​
    wget https://archive.apache.org/dist/kafka/2.2.2/kafka_2.11-2.2.2.tgz​
    ​
  1. 解压开源 Kafka 2.2.2 版本工具包。​
  • ​
    tar -zxvf kafka_2.11-2.2.2.tgz ​
    ​
  1. 配置鉴权。​
  1. 进入解压文件的./config目录下。​
  1. 修改 consumer.properties和 producer.properties文件,在文件中配置 SASL 用户类型、用户名称和密码。​
  • 使用 PLAIN 用户时:​
  • ​
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="{PLAIN用户名称}" password="{用户密码}"; ​
    sasl.mechanism=PLAIN​
    ​
    security.protocol=SASL_SSL​
    ​
  • 使用 SCRAM 用户时:​
  • ​
    sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="{SCRAM用户名称}" password="{用户密码}"; ​
    sasl.mechanism=SCRAM-SHA-256​
    ​
    security.protocol=SASL_SSL​
    ​
  1. 生产消息压力测试。​
  1. 进入解压后文件的./bin 目录下。​
  1. 执行以下命令,进行生产消息压力测试。​
  • ​
    ./kafka-producer-perf-test.sh --topic {Topic名称} --num-records 100000 --record-size 1000 --throughput 20000 --producer-props bootstrap.servers={SASL_SSL接入点域名:端口} --producer.config ../config/producer.properties​
    ​
  • ​
    参数​
    说明​
    --topic​
    指定目标 Topic 的名称,需要提前在 Kafka 控制台创建。​
    --num-records​
    发送的消息数量。​
    --record-size​
    消息的大小,单位为 Byte。​
    --throughput​
    每秒的吞吐量,即每秒发送多少条消息。​
    如果设置为-1,则表示不限制每秒发送的消息数量。​
    --producer-props​
    Kafka 生产者相关的配置属性。​
    • bootstrap.servers:Kafka 实例的接入点。请在控制台实例详情页面的服务访问区域中查看 SASL_SSL 接入点信息。​
    --producer.config​
    指定生产者的配置文件,比如可以配置为../config/producer.properties。​
    ​
  1. 查看压力测试结果。​
  • ​
    [root@iv-xxx5uo bin]# ./kafka-producer-perf-test.sh --topic topic-1 --num-records 100000 --record-size 1000 --throughput 20000 --producer-props bootstrap.servers=kafka-xxxdgw.kafka.ivolces.com:9095 --producer.config ../config/producer.properties​
    62737 records sent, 12544.9 records/sec (11.96 MB/sec), 1501.5 ms avg latency, 2430.0 ms max latency.​
    100000 records sent, 11490.290704 records/sec (10.96 MB/sec), 1940.06 ms avg latency, 3803.00 ms max latency, 1934 ms 50th, 3651 ms 95th, 3798 ms 99th, 3799 ms 99.9th.​
    ​
  • 分析:本例中一共写入 10w 条消息,每秒向 Kafka 写入了 10.96MB 的数据,平均是 11490.290704 条消息/秒,每次写入的平均延迟为 1940.06 毫秒,最大的延迟为 3803.00 毫秒。​
  1. 消费消息压力测试。​
  1. 进入解压后文件的./bin 目录下。​
  1. 执行以下命令,进行消费消息压力测试。​
  • ​
    ./kafka-consumer-perf-test.sh --topic {Topic名称} --fetch-size 1048576 --messages 100000 --group {Group名称} --broker-list {SASL_SSL接入点域名:端口} --consumer.config ../config/consumer.properties​
    ​
  • ​
    参数​
    说明​
    --topic​
    指定需要订阅的目标 Topic 的名称。​
    --fetch-size​
    一次请求提取的数据量 , 默认 1048576,单位为 Byte。​
    --messages​
    消费的消息数量。​
    --group​
    自定义设置 Group 的名称,无需提前在 kafka 控制台上创建。​
    --broker-list​
    Kafka 实例的接入点。请在控制台实例详情页面的服务访问区域中查看接入点信息。​
    --consumer.config​
    指定消费者的配置文件,比如可以配置为../config/consumer.properties。​
    ​
  1. 查看压力测试结果。​
  • ​
    [root@iv-xxx5uo bin]# ./kafka-consumer-perf-test.sh --topic topic-1 --fetch-size 1048576 --messages 100000 --group group-1 --broker-list kafka-xxxdgw.kafka.ivolces.com:9095 --consumer.config ../config/consumer.properties​
    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 17:44:26:414, 2024-08-05 17:44:40:749, 95.3674, 6.6528, 100000, 6975.9330, 3099, 11236, 8.4877, 8899.9644​
    ​
  • 执行命令后,返回如下类似结果,分析如下:​
  • 开始测试时间 start.time:2024-08-05 17:44:26:414​
  • 结束时间 end.time:2024-08-05 17:44:40:749​
  • 最大吞吐率 data.consumed.in.MB:95.3674MB/s​
  • 平均每秒消费 MB.sec:6.6528MB/s​
  • 最大每秒消费条数 data.consumed.in.nMsg:100000条​
  • 平均每秒消费条数 nMsg.sec:6975.9330条​
​
最近更新时间:2026.04.28 10:35:32
这个页面对您有帮助吗?
有用
有用
无用
无用