目录
4. Kafka基准测试
4.1 基准测试
基准测试(benchmark testing)是一种测量和评估软件性能指标的活动。我们可以通过基准测试,了解到软件、硬件的性能水平。主要测试负载的执行时间、传输速度、吞吐量、资源占用率等。
4.1.1 基于1个分区1个副本的基准测试
测试步骤:
1.启动Kafka集群
2.创建一个1个分区1个副本的topic: benchmark
3.同时运行生产者、消费者基准测试程序
4.观察结果
4.1.1.1 创建topic
bin/kafka-topics.sh --zookeeper node1.itcast.cn:2181 --create --topic benchmark --partitions 1 --replication-factor 1
4.1.1.2 生产消息基准测试
在生产环境中,推荐使用生产5000W消息,这样会性能数据会更准确些。为了方便测试,课程上演示测试500W的消息作为基准测试。
bin/kafka-producer-perf-test.sh --topic benchmark --num-records 5000000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=node1.itcast.cn:9092,node2.itcast.cn:9092,node3.itcast.cn:9092 acks=1
测试结果:
吞吐量 | 93092.533979 records/sec 每秒9.3W条记录 |
吞吐速率 | (88.78 MB/sec) 每秒约89MB数据 |
平均延迟时间 | 346.62 ms avg latency |
最大延迟时间 | 1003.00 ms max latency |
4.1.1.3 消费消息基准测试
bin/kafka-consumer-perf-test.sh --broker-list node1.itcast.cn:9092,node2.itcast.cn:9092,node3.itcast.cn:9092 --topic benchmark --fetch-size 1048576 --messages 5000000
data.consumed.in.MB 共计消费的数据 | 4768.3716MB |
MB.sec 每秒消费的数量 | 445.6006 每秒445MB |
data.consumed.in.nMsg 共计消费的数量 | 5000000 |
nMsg.sec 每秒的数量 | 467246.0518 每秒46.7W条 |
4.1.2 基于3个分区1个副本的基准测试
被测虚拟机:
node1.itcast.cn | node2.itcast.cn | node3.itcast.cn |
inter i5 8th 8G内存 | inter i5 8th 4G内存 | inter i5 8th 4G内存 |
4.1.2.1 创建topic
bin/kafka-topics.sh --zookeeper node1.itcast.cn:2181 --create --topic benchmark --partitions 3 --replication-factor 1
4.1.2.2 生产消息基准测试
bin/kafka-producer-perf-test.sh --topic benchmark --num-records 5000000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=node1.itcast.cn:9092,node2.itcast.cn:9092,node3.itcast.cn:9092 acks=1
测试结果:
指标 | 3分区1个副本 | 单分区单副本 |
吞吐量 | 68755.930199 records/sec | 93092.533979 records/sec 每秒9.3W条记录 |
吞吐速率 | 65.57 MB/sec | (88.78 MB/sec) 每秒约89MB数据 |
平均延迟时间 | 469.37 ms avg latency | 346.62 ms avg latency |
最大延迟时间 | 2274.00 ms max latency | 1003.00 ms max latency |
在虚拟机上,因为都是共享笔记本上的CPU、内存、网络,所以分区越多,反而效率越低。但如果是真实的服务器,分区多效率是会有明显提升的。
4.1.2.3 消费消息基准测试
bin/kafka-consumer-perf-test.sh --broker-list node1.itcast.cn:9092,node2.itcast.cn:9092,node3.itcast.cn:9092 --topic benchmark --fetch-size 1048576 --messages 5000000
指标 | 单分区3个副本 | 单分区单副本 |
data.consumed.in.MB 共计消费的数据 | 4768.3716MB | 4768.3716MB |
MB.sec 每秒消费的数量 | 265.8844MB | 445.6006 每秒445MB |
data.consumed.in.nMsg 共计消费的数量 | 5000000 | 5000000 |
nMsg.sec 每秒的数量 | 278800.0446 每秒27.8W | 467246.0518 每秒46.7W |
还是一样,因为虚拟机的原因,多个分区反而消费的效率也有所下降。
4.1.3 基于1个分区3个副本的基准测试
4.1.3.1 创建topic
bin/kafka-topics.sh --zookeeper node1.itcast.cn:2181 --create --topic benchmark --partitions 1 --replication-factor 3
4.1.3.2 生产消息基准测试
bin/kafka-producer-perf-test.sh --topic benchmark --num-records 5000000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=node1.itcast.cn:9092,node2.itcast.cn:9092,node3.itcast.cn:9092 acks=1
测试结果:
指标 | 单分区3个副本 | 单分区单副本 |
吞吐量 | 29899.477955 records/sec | 93092.533979 records/sec 每秒9.3W条记录 |
吞吐速率 | 28.51 MB/sec | (88.78 MB/sec) 每秒约89MB数据 |
平均延迟时间 | 1088.43 ms avg latency | 346.62 ms avg latency |
最大延迟时间 | 2416.00 ms max latency | 1003.00 ms max latency |
同样的配置,副本越多速度越慢。
4.1.3.3 消费消息基准测试
bin/kafka-consumer-perf-test.sh --broker-list node1.itcast.cn:9092,node2.itcast.cn:9092,node3.itcast.cn:9092 --topic benchmark --fetch-size 1048576 --messages 5000000
指标 | 单分区3个副本 | 单分区单副本 |
data.consumed.in.MB 共计消费的数据 | 4768.3716MB | 4768.3716MB |
MB.sec 每秒消费的数量 | 265.8844MB 每秒265MB | 445.6006 每秒445MB |
data.consumed.in.nMsg 共计消费的数量 | 5000000 | 5000000 |
nMsg.sec 每秒的数量 | 278800.0446 每秒27.8W | 467246.0518 每秒46.7W |