Kafka性能测试
使用kafka自带的性能测试工具进行kafka服务的压力测试。
1. 概述
Kafka有自带的性能测试工具,输入以下命令可以查看性能测试帮助:
$ bin/kafka-producer-perf-test.sh --help
$ bin/kafka-consumer-perf-test.sh --help
本文主要使用kafka自带的性能测试工具,针对无副本的主题做一个简单的测试说明。
2. 测试生产者性能
首先,我们为测试数据创建一个主题。下面的示例将创建名为test-rep-one
,分区为6,复制因子为1的主题。数据的保留时间为1小时。根据实际的环境需要,修改对应的broker。
$ 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时表示消息会尽快生成。
$ 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
输出结果如下:
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
的数据进行消费的性能测试:
$ bin/kafka-consumer-perf-test.sh \
--topic test-rep-one \
--broker-list 127.0.0.1:9092 \
--messages 3000000
输入结果如下:
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进行加密数据传输,我们的命令如下:
$ bin/kafka-run-class.sh kafka.tools.EndToEndLatency 127.0.0.1:9092 test-rep-one 10000 1 1024
这将产生类似以下的输出:
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等。