程序版本、服务器配置
kafka: 2.13-3.0.0
kafka-clients: 3.0.0
服务器配置:8C16G 200G硬盘
使用kafka的性能测试工具
- 删除topic
./kafka-topics.sh --delete --topic KAFKA_TEST --bootstrap-server x.x.x.x:9092 - 新建topic
./kafka-topics.sh --create --topic KAFKA_TEST --bootstrap-server x.x.x.x:9092 --partitions 1 --replication-factor 1 - 添加消息
./kafka-producer-perf-test.sh --num-records 5000000 --record-size 1000 --topic KAFKA_TEST --throughput -1 --producer-props bootstrap.servers=x.x.x.x:9092 - 消费消息
./kafka-consumer-perf-test.sh --broker-list x.x.x.x:9092 --messages 5000000 --topic KAFKA_TEST
比对维度
- broker和consumer在同一个机器上 VS 在不同机器上
- 启动1个consumer VS 启动多个consumer
- 首次消费消息 VS 后续次消费消息
- topic分区数量
测试过程和结果
1. broker和consumer在同一个机器上 VS 在不同机器上
新建topic(1个partition)、添加消息,分别在broker和另一个机器上消费消息。
结论:
broker和consumer在同一个机器上,消费更快。
2. 启动1个consumer VS 启动多个consumer
分别在broker和另一个机器上消费消息,同时启动3个consumer。
结论:
和启动1个consumer相比,3个consumer的消费能力总和更高,但是单consumer的消费能力会减小。当broker和consumer不在同一个机器上时,单consumer的消费能力减小得更明显。
3. 首次消费消息 VS 后续次消费消息
删除topic、新建topic(1个partition)、添加消息,分别在broker和另一个机器上连续多次消费消息。
结论:
短时间内多次消费相同的消息,后续消费比首次快。推测kafka内部有缓存机制。
4. topic分区数量
按上面的步骤再测试一次,创建topic时,指定partitions为3
结论:
单个broker时,topic包含1个parition和包含多个partition对consumer性能影响不大。