一、介绍
kafka中提供了很多脚本和工具供我们使用,在下载压缩包解压后的/bin目录下。
EndToEndLatency是一个用来测试发送消息端到端延迟的一个工具,producer->broker->consumer,其对应的脚本是/bin/kafka-e2e-latency.sh。
这篇文章来看一下如何使用。
注意:以下命令基于个人主机做了个性化处理,因此可能不完全同于官方用法
二、使用
首先我们看一下这个脚本的使用说明
(base) lansg:~/ $ kafka-e2e-latency.sh --help [10:02:53]
USAGE: java org.apache.kafka.tools.EndToEndLatency broker_list topic num_messages producer_acks message_size_bytes [optional] properties_file
(base) lansg:~/ $ kafka-e2e-latency.sh --help [10:02:53]
USAGE: java org.apache.kafka.tools.EndToEndLatency broker_list topic num_messages producer_acks message_size_bytes [optional] properties_file
这里大概有说明如何传参,例如broker_list,topic,然后用空格分隔等等,接下来我们用一个实际的例子体感一下。
1.启动kafka server
这是我的启动日志
启动Kafka broker...
3eb064425467d6b7a3a86183165f329823459f15d564e56f26ac210152ffd847
=================================================
node.id=16616
broker address: 172.20.10.3:10686
jmx address: 172.20.10.3:17525
exporter address: 172.20.10.3:12546
=================================================
2.检查topic。
这一步确认我们当前有topic,如果没有的话我们可以临时创建一个
(base) lansg:~/ $ kafka-topics --list --bootstrap-server 172.20.10.3:10686
__consumer_offsets
test-topic
这里我有一个test-topic,因此我使用这个topic进行测试。
3.执行kafka-e2e-latency命令
(1)单个broker
(base) lansg:~/ $ kafka-e2e-latency.sh 172.20.10.3:10686 test-topic 1 1 512
0 59.614542
Avg latency: 59.6145 ms
Percentiles: 50th = 59, 99th = 59, 99.9th = 59
这条命令的含义如下:
- 172.20.10.3:10686 –
broker_list
:Kafka broker 的地址和端口 - test-topic –
topic
:要测试的主题名称 - 1 –
num_messages
:要发送的消息数量 - 1 –
producer_acks
:生产者确认级别0
:生产者不等待确认1
:等待 leader 副本确认all
/-1
:等待所有同步副本确认
- 512 –
message_size_bytes
:每条消息的大小(以字节为单位)
响应结果含义如下:
# 第一个数字 0 是消息的序号(因为我们只发送了1条消息,所以只有序号0)
#59.614542 是这条消息从发送到接收所花费的时间
0 59.614542
#这是平均延迟时间 因为我们只发送了一条消息,所以平均值就等于那条消息的延迟时间
Avg latency: 59.6145 ms
#百分位数统计,用来描述延迟的分布情况
#50th 百分位(中位数):50%的消息延迟小于等于59ms
#99th 百分位:99%的消息延迟小于等于59ms
#99.9th 百分位:99.9%的消息延迟小于等于59ms
Percentiles: 50th = 59, 99th = 59, 99.9th = 59
这里我们只有一条消息,因此百分比展示可能有一些问题。
这里我们再测试多条消息的情况:
(base) lansg:~/ $ kafka-e2e-latency.sh 172.20.10.3:10686 test-topic 1000 1 512
0 25.234917000000003
Avg latency: 1.1857 ms
#50%的消息延迟在1毫秒或以下(中位数)
#99%的消息延迟在2毫秒或以下
#99.9%的消息延迟在25毫秒或以下
Percentiles: 50th = 1, 99th = 2, 99.9th = 25
(2)多个broker
如果我们要传入多个broker的地址,那么broker_list参数我们可以以,
进行分隔,例如domain1:port,domain2:port
。
一些注意事项:
对于producer_acks
参数的传值,我们只能传1
或者all
,这是因为,如果ack为0,那么可能数据还没有写入kafka,就已经开始进行延迟的计算,可能会导致数据值偏小。
我们希望测试的是每条消息都被可靠的处理,也就是producer发送->写入到kafka->consumer消费这个流程。