如何使用EndToEndLatency工具测试E2E延迟

一、介绍

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消费这个流程。