目录

Kafka性能测试

使用kafka自带的性能测试工具进行kafka服务的压力测试。

1. 概述

Kafka有自带的性能测试工具,输入以下命令可以查看性能测试帮助:

1
2
$ bin/kafka-producer-perf-test.sh --help
$ bin/kafka-consumer-perf-test.sh --help

本文主要使用kafka自带的性能测试工具,针对无副本的主题做一个简单的测试说明。

2. 测试生产者性能

首先,我们为测试数据创建一个主题。下面的示例将创建名为test-rep-one,分区为6,复制因子为1的主题。数据的保留时间为1小时。根据实际的环境需要,修改对应的broker。

1
2
3
4
5
6
7
$ bin/kafka-topics.sh \
--create \
--topic test-rep-one \
--partitions 6 \
--replication-factor 1 \
--config retention.ms=86400000 \
--bootstrap-server 127.0.0.1:9092

然后使用不同的生产者性能测试脚本。以下示例将使用上面创建的主题来存储300万条数据,每条消息的大小为1KB。-throughput设为-1时表示消息会尽快生成。

1
2
3
4
5
6
$ bin/kafka-producer-perf-test.sh \
--topic test-rep-one \
--throughput -1 \
--num-records 3000000 \
--record-size 1024 \
--producer-props acks=all bootstrap.servers=127.0.0.1:9092

输出结果如下:

1
2
2737472 records sent, 547494.4 records/sec (534.66 MB/sec), 53.7 ms avg latency, 248.0 ms max latency.
3000000 records sent, 555967.383247 records/sec (542.94 MB/sec), 52.52 ms avg latency, 248.00 ms max latency, 44 ms 50th, 111 ms 95th, 168 ms 99th, 226 ms 99.9th.

可以看到当前的生产性能为547494.4条每秒。

3. 测试消费者性能

下面的示例将读取上面的主题test-rep-one的数据进行消费的性能测试:

1
2
3
4
$ bin/kafka-consumer-perf-test.sh \
--topic test-rep-one \
--broker-list 127.0.0.1:9092 \
--messages 3000000

输入结果如下:

1
2
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
2021-05-20 14:38:45:150, 2021-05-20 14:38:48:203, 2929.6875, 959.6094, 3000000, 982640.0262, 224, 2829, 1035.5912, 1060445.3871

可以看到当前的吞吐量为 982640.0262条每秒。

4. 端到端延迟测试

端到端延迟是消息生成到消费之间的时间。 这对于实时应用程序尤其重要。

例如,如果我们看一下kafka-consumer-perf-test.sh脚本的内容,将会看到对kafka-run-class.sh脚本的调用,并以kafka.tools.ConsumerPerformance类作为参数。

例如,在我们的test-rep-one测试主题中,要生成和使用大小为1kb的消息共1万条,并且将acks值设置为1(leader acks)并通过ssl端口9092进行加密数据传输,我们的命令如下:

1
$ bin/kafka-run-class.sh kafka.tools.EndToEndLatency 127.0.0.1:9092 test-rep-one 10000 1 1024

这将产生类似以下的输出:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
0	24.462583
1000	4.121916000000001
2000	0.210125
3000	0.175917
4000	0.23775
5000	0.1855
6000	0.281
7000	0.126708
8000	0.168417
9000	0.441625
Avg latency: 0.3095 ms

Percentiles: 50th = 0, 99th = 1, 99.9th = 5

5. 小结

本文简述了使用kafka自带的性能测试工具对生产、消费及端对端的延迟进行测试。该测试的结果值只能做为参考。在实际的测试过程中,可能需要针对不同的实际场景做好对应的性能测试。例如acks配置、batch.size等。

6. 引用

  1. Apache Kafka: How to Test Performance for Clients Configured with SSL Encryption
  2. Kafka Benchmark Commands
  3. 99th Percentile Latency at Scale with Apache Kafka
  4. Benchmark commands