Kafka 性能测试脚本详解
一、介绍
Apache Kafka 官方提供了两个客户端性能测试脚本,它们的存放位置如下:
- 生产者性能测试脚本:$KAFKA_HOME/bin/kafka-producer-perf-test.sh
- 消费者性能测试脚本:$KAFKA_HOME/bin/kafka-consumer-perf-test.sh
kafka-producer-perf-test.sh 支持测试的性能指标包括:吞吐量(throughput)、最大时延(max-latency)、平均时延(avg-latency);kafka-consumer-perf-test.sh 同样支持吞吐量指标,还提供了一些消费端特有的指标,但没有直接提供时延信息。
二、使用
2.1 kafka-producer-perf-test.sh
此脚本用于测试 Kafka 生产消息的性能,可选参数列表如下,加粗项为常用参数。
参数名 | 含义 |
---|---|
-h, --help | 显示使用帮助并退出 |
--topic | 指定生产的消息发往的 topic |
--num-records | 指定生产的消息总数 |
--payload-delimeter | 如果通过 --payload-file 指定了从文件中获取消息内容,那么这个参数的意义是指定文件的消息分隔符,默认值为 \n,即文件的每一行视为一条消息;如果未指定 --payload-file 则此参数不生效 |
--throughput | 限制每秒发送的最大的消息数,设为 -1 表示不限制 |
--producer-props | 直接指定 Producer 配置,格式为 NAME=VALUE,例如 bootstrap.server=127.0.0.1:9092,通过此种方式指定的配置优先级高于 --producer.config |
--producer-config | 指定 Producer 的配置文件,格式参照官方的 config/producer.properties |
--print-metrics | 在测试结束后打印更详尽的指标,默认为 false |
--transactional-id | 指定事务 ID,测试并发事务的性能时需要,只有在 --transaction-duration-ms > 0 时生效,默认值为 performance-producer-default-transactional-id |
--transactional-duration-ms | 指定事务持续的最长时间,超过这段时间后就会调用 commitTransaction 来提交事务,只有指定了 > 0 的值才会开启事务,默认值为 0 |
--record-size | 指定每条消息的大小,单位是字节,和 --payload-file 两个中必须指定一个,但不能同时指定 |
--payload-file | 指定消息的来源文件,只支持 UTF-8 编码的文本文件,文件的消息分隔符通过 --payload-delimeter 指定,和 --record-size 两个中必须指定一个,但不能同时指定 |
【示例】
bin/kafka-producer-perf-test.sh --topic perf-test --num-records 1000 --record-size 1024 --throughput -1 --producer-props bootstrap.servers=127.0.0.1:9092 compression.type=lz4
【输入解释】
发送 1000 条大小为 1KB 的消息到地址为 127.0.0.1:9092 的 broker 上的 perf-test 主题,发送时不限制吞吐量,并使用 lz4 算法压缩消息。
执行示例命令后,控制台输出一行测试结果,如下:
1000 records sent, 3424.657534 records/sec (3.34 MB/sec), 13.61 ms avg latency, 255.00 ms max latency, 13 ms 50th, 20 ms 95th, 255 ms 99th.
【输出解释】
成功消费了 1000 条消息,吞吐量为 3424.657534 条/秒 (或 3.34 MB/秒),平均时延为 13.61 ms,最大时延为 255.00 ms,50 % 的消息延时在 13 ms 内,95 % 的消息延时在 20 ms 内,99 % 的消息延时在 255 毫秒内。
2.2 kafka-consumer-perf-test.sh
此脚本用于测试 Kafka 消费消息的性能,可选参数列表如下,加粗项为常用参数。
参数名 | 含义 |
---|---|
--bootstrap-server | 指定 broker 地址,必选,除非用 --broker-list 代替(不建议) |
--topic | 指定消费的 topic,必选 |
--version | 输出 Kafka 版本 |
--consumer.config | 指定 Consumer 配置文件 |
--date-format | 指定用于格式化 *.time 的规则,默认为 yyyy-MM-dd HH:mm:ss:SSS |
--fetch-size | 指定一次请求消费的大小,默认为 1048576 即 1 MB |
--from-latest | 如果 Consumer 没有已经建立的 offset,则指定从 log 中最新的位点开始消费,而不是从最早的位点开始消费 |
--group | 指定 ConsumerGroup ID,默认为 perf-consumer-40924 |
--help | 显示使用帮助并退出 |
--hide-header | 指定后不输出 header 信息 |
--messages | 指定消费的消息数量,必选 |
--num-fetch-threads | 指定 fetcher 线程的数量 |
--print-metrics | 指定打印 metrics 信息 |
--reporting-interval | 指定打印进度信息的时间间隔,默认为 5000 即 5 秒 |
--show-detailed-stats | 指定每隔一段时间(由 --reporting-interval 指定)输出显示详细的状态信息 |
--socket-buffer-size | 指定 TCP 的 RECV 大小,默认为 2097152 即 2 MB |
--threads | 指定消费的线程数,默认为 10 |
--timeout | 指定允许的最大超时时间,即每条消息返回的最大时间间隔,默认为 10000 即 10 秒 |
【示例】
bin/kafka-consumer-perf-test.sh --bootstrap-server 127.0.0.1:9092 --topic perf_test --messages 1000000 --threads 8 --reporting-interval 1000 --show-detailed
【输入解释】
同时开启 8 个消费线程,从 127.0.0.1:9092 的 broker 上的 perf-test 主题中消费 1000 条消息,每隔 1000 ms = 1 s 打印一次消费进度信息。最后两个参数在消费数量很小的场景下没有什么帮助,比如若消费数量只有 1000,命令瞬间就可以执行返回;但当指定的消费数量很大(如示例中为 1000 万)时,需要 10 s 左右才能消费完,此时定时输出一下进度信息就显得很有用了。
执行示例命令后,控制台输出两行信息,其中第一行为表头,接下来的数行为每秒的进度信息,如下:
time, threadId, 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-03-25 15:57:59:426, 0, 657.2275, 657.2275, 673001, 673001.0000, 1616659078690, -1616659077690, 0.0000, 0.0000
...
【输出解释】
- time:当前时间,格式由 --date-format 指定
- threadId:线程 ID
- data.consumed.in.MB:消费到的数据总大小,单位为 MB
- MB.sec:消费 TPS,即每秒消费的消息大小
- data.consumed.in.nMsg:消费到的总消息数
- nMsg.sec:消费 TPS,即每秒消费的消息条数
- rebalance.time.ms:消费者组重平衡的耗时,单位为 ms,0 表示没有发生重平衡
- fetch.time.ms:fetch 线程的总耗时,单位为 ms
- fetch.MB.sec:fetch 线程每秒钟获取到的消息大小
- fetch.nMsg.sec:fetch 线程每秒钟获取到的消息数量
【注意】
若没有指定 --show-detailed,则输出信息中的前两项会有所不同,如下:
start.time, end.time, data.consumed.in.MB, MB.sec, ...
- start.time:消费开始的时间,格式由 --date-format 指定
- end.time:消费结束的时间,格式由 --date-format 指定
本文来自博客园,作者:六开箱,转载请注明原文链接:https://www.cnblogs.com/lkxed/p/kafka-perf-test-tools.html