测试步骤
测试以下四种场景下,客户端消息生产速率和服务端CPU消耗。
- 测试场景一(批处理大小):相同的Kafka实例和Topic,不同的batch.size
- 测试场景二(是否跨AZ生产):相同的Kafka实例和Topic,生产客户端和服务端在不同的AZ中
- 测试场景三(副本数):相同的Kafka实例,不同的Topic副本数
- 测试场景四(同步/异步复制):相同的Kafka实例,不同复制机制的Topic
分区数 |
副本数 |
是否同步复制 |
batch.size |
是否跨AZ生产 |
---|---|---|---|---|
3 |
1 |
否 |
1KB |
否 |
3 |
1 |
否 |
16KB |
否 |
3 |
1 |
否 |
1KB |
是 |
3 |
3 |
是 |
1KB |
否 |
3 |
3 |
否 |
1KB |
否 |
测试脚本如下:
./kafka-producer-perf-test.sh --producer-props bootstrap.servers=${连接地址} acks=1 batch.size=${batch.size} linger.ms=0 --topic ${Topic名称} --num-records ${num-records} --record-size 1024 --throughput -102400
- bootstrap.servers:购买Kafka实例中获取的Kafka实例的地址。
- acks:消息主从同步策略,acks=1表示异步复制消息,acks=-1表示同步复制消息。
- batch.size:每次批量发送消息的大小(单位为字节)。
- linger.ms:两次发送时间间隔。
- topic:创建Topic中设置的Topic名称。
- num-records:总共需要发送的消息数。
- record-size:每条消息的大小。
- throughput:每秒发送的消息数。
测试场景一:批处理大小
- 登录客户端服务器,进入“kafka_2.12-2.7.2/bin”目录下,执行以下脚本。
batch.size=1KB,执行脚本如下:
./kafka-producer-perf-test.sh --producer-props bootstrap.servers=192.168.0.69:9092,192.168.0.42:9092,192.168.0.66:9092 acks=1 batch.size=1024 linger.ms=0 --topic Topic-01 --num-records 8000000 --record-size 1024 --throughput 102400
执行结果如下:
8000000 records sent, 37696.729809 records/sec (36.81 MB/sec), 796.54 ms avg latency, 3838.00 ms max latency, 322 ms 50th, 2282 ms 95th, 2745 ms 99th, 3593 ms 99.9th.
客户端消息生产速率=37697
batch.size=16KB,执行脚本如下:
./kafka-producer-perf-test.sh --producer-props bootstrap.servers=192.168.0.69:9092,192.168.0.42:9092,192.168.0.66:9092 acks=1 batch.size=16384 linger.ms=0 --topic Topic-01 --num-records 100000000 --record-size 1024 --throughput 102400
执行结果如下:
100000000 records sent, 102399.318430 records/sec (100.00 MB/sec), 4.62 ms avg latency, 751.00 ms max latency, 1 ms 50th, 3 ms 95th, 164 ms 99th, 406 ms 99.9th.
客户端消息生产速率=102399
- 登录Kafka实例控制台,在测试实例所在行,单击,跳转到云监控界面。
- 在“节点”页签,查看服务端节点的CPU使用率。
图1 broker-0的CPU使用率(batch.size=1KB)
CPU消耗=54%
图2 broker-0的CPU使用率(batch.size=16KB)
CPU消耗=26%
图3 broker-1的CPU使用率(batch.size=1KB)
CPU消耗=55%
图4 broker-1的CPU使用率(batch.size=16KB)
CPU消耗=25%
图5 broker-2的CPU使用率(batch.size=1KB)
CPU消耗=51.65%
图6 broker-2的CPU使用率(batch.size=16KB)
CPU消耗=36.45%
测试场景二:是否跨AZ生产
- 登录客户端服务器,进入“kafka_2.12-2.7.2/bin”目录下,执行以下脚本。
客户端服务器和实例在相同的AZ中,执行脚本如下:
./kafka-producer-perf-test.sh --producer-props bootstrap.servers=192.168.0.69:9092,192.168.0.42:9092,192.168.0.66:9092 acks=1 batch.size=1024 linger.ms=0 --topic Topic-01 --num-records 8000000 --record-size 1024 --throughput 102400
执行结果如下:
8000000 records sent, 37696.729809 records/sec (36.81 MB/sec), 796.54 ms avg latency, 3838.00 ms max latency, 322 ms 50th, 2282 ms 95th, 2745 ms 99th, 3593 ms 99.9th.
客户端消息生产速率=37697
客户端服务器和实例在不同的AZ中,执行脚本如下:
./kafka-producer-perf-test.sh --producer-props bootstrap.servers=192.168.0.69:9092,192.168.0.42:9092,192.168.0.66:9092 acks=1 batch.size=1024 linger.ms=0 --topic Topic-01 --num-records 4000000 --record-size 1024 --throughput 102400
执行结果如下:
4000000 records sent, 15358.152107 records/sec (15.00 MB/sec), 1944.09 ms avg latency, 8179.00 ms max latency, 13 ms 50th, 6049 ms 95th, 6549 ms 99th, 8086 ms 99.9th.
客户端消息生产速率=15358
- 登录Kafka实例控制台,在测试实例所在行,单击,跳转到云监控界面。
- 在“节点”页签,查看服务端节点的CPU使用率。
图7 broker-0的CPU使用率(客户端服务器和实例在相同的AZ中)
CPU消耗=54%
图8 broker-0的CPU使用率(客户端服务器和实例在不同的AZ中)
CPU消耗=28%
图9 broker-1的CPU使用率(客户端服务器和实例在相同的AZ中)
CPU消耗=55%
图10 broker-1的CPU使用率(客户端服务器和实例在不同的AZ中)
CPU消耗=28%
图11 broker-2的CPU使用率(客户端服务器和实例在相同的AZ中)
CPU消耗=51.65%
图12 broker-2的CPU使用率(客户端服务器和实例在不同的AZ中)
CPU消耗=23.35%
测试场景三:副本数
- 登录客户端服务器,进入“kafka_2.12-2.7.2/bin”目录下,执行以下脚本。
1副本,执行脚本如下:
./kafka-producer-perf-test.sh --producer-props bootstrap.servers=192.168.0.69:9092,192.168.0.42:9092,192.168.0.66:9092 acks=1 batch.size=1024 linger.ms=0 --topic Topic-01 --num-records 8000000 --record-size 1024 --throughput 102400
执行结果如下:
8000000 records sent, 37696.729809 records/sec (36.81 MB/sec), 796.54 ms avg latency, 3838.00 ms max latency, 322 ms 50th, 2282 ms 95th, 2745 ms 99th, 3593 ms 99.9th.
客户端消息生产速率=37697
3副本,执行脚本如下:
./kafka-producer-perf-test.sh --producer-props bootstrap.servers=192.168.0.69:9092,192.168.0.42:9092,192.168.0.66:9092 acks=1 batch.size=1024 linger.ms=0 --topic Topic-02 --num-records 4000000 --record-size 1024 --throughput 102400
执行结果如下:
4000000 records sent, 15245.877896 records/sec (14.89 MB/sec), 1963.88 ms avg latency, 7471.00 ms max latency, 306 ms 50th, 5854 ms 95th, 6682 ms 99th, 7439 ms 99.9th.
客户端消息生产速率=15246
- 登录Kafka实例控制台,在测试实例所在行,单击,跳转到云监控界面。
- 在“节点”页签,查看服务端节点的CPU使用率。
图13 broker-0的CPU使用率(1副本)
CPU消耗=54%
图14 broker-0的CPU使用率(3副本)
CPU消耗=86%
图15 broker-1的CPU使用率(1副本)
CPU消耗=55%
图16 broker-1的CPU使用率(3副本)
CPU消耗=87%
图17 broker-2的CPU使用率(1副本)
CPU消耗=51.65%
图18 broker-2的CPU使用率(3副本)
CPU消耗=87.10%
测试场景四:同步/异步复制
- 登录客户端服务器,进入“kafka_2.12-2.7.2/bin”目录下,执行以下脚本。
异步复制,执行脚本如下:
./kafka-producer-perf-test.sh --producer-props bootstrap.servers=192.168.0.69:9092,192.168.0.42:9092,192.168.0.66:9092 acks=1 batch.size=1024 linger.ms=0 --topic Topic-02 --num-records 4000000 --record-size 1024 --throughput 102400
执行结果如下:
4000000 records sent, 15245.877896 records/sec (14.89 MB/sec), 1963.88 ms avg latency, 7471.00 ms max latency, 306 ms 50th, 5854 ms 95th, 6682 ms 99th, 7439 ms 99.9th.
客户端消息生产速率=15246
同步复制,执行脚本如下:
./kafka-producer-perf-test.sh --producer-props bootstrap.servers=192.168.0.69:9092,192.168.0.42:9092,192.168.0.66:9092 acks=-1 batch.size=1024 linger.ms=0 --topic Topic-03 --num-records 1000000 --record-size 1024 --throughput 102400
执行结果如下:
1000000 records sent, 5180.783438 records/sec (5.06 MB/sec), 5692.27 ms avg latency, 10312.00 ms max latency, 5579 ms 50th, 7538 ms 95th, 9481 ms 99th, 10219 ms 99.9th.
客户端消息生产速率=5181
- 登录Kafka实例控制台,在测试实例所在行,单击,跳转到云监控界面。
- 在“节点”页面,查看服务端节点的CPU使用率。
图19 broker-0的CPU使用率(异步复制)
CPU消耗=86%
图20 broker-0的CPU使用率(同步复制)
CPU消耗=62%
图21 broker-1的CPU使用率(异步复制)
CPU消耗=87%
图22 broker-1的CPU使用率(同步复制)
CPU消耗=61%
图23 broker-2的CPU使用率(异步复制)
CPU消耗=87.10%
图24 broker-2的CPU使用率(同步复制)
CPU消耗=59.40%