kafka升级了版本反而变慢了?

92 阅读1分钟

起因

我从kafka2.6.1升级到kafka3.3.1的kraft模式之后,想要压测一下来对比两者性能。

使用kafka自带的压测脚本kafka-producer-perf-test.sh写入10G的数据

nohup ./kafka-producer-perf-test.sh --topic test --num-records 10485760 --record-size 1024 --throughput -1 --producer-props bootstrap.servers=10.9.165.68:9092,10.9.64.103:9092,10.9.178.93:9092 > ./producer.log 2>&1 &

结果压测出来

image.png kafka3.3.1有74MB/s

image.png kafka2.6.1居然有142MB/s

两套物理环境的硬件配置一致,都是三节点的2c 4G 200G SSD。2.6.1用的centos6,3.3.1用的centos7

dd测试两套环境磁盘写入速度相近,都有140MB/s左右的速度

结论

结论:ack和压测程序逻辑有变化

kafka3.3.1相比kafka2.6.1生产者的默认参数有很大的变化主要有以下区别

2.6.1默认值3.3.1默认值
partitioner.adaptive.partitioning.enable无此配置开启
ack1all
partitioner.availability.timeout.ms无此配置0
partitioner.ignore.keys无此配置false
socket.connection.setup.timeout.ms10000
ack会影响broker的返回写入成功的速度

还有一个很重要的点是压测程序org.apache.kafka.tools.ProducerPerformance生成消息payload的时候逻辑不一样 image.png kafka2.6.1发送消息的时候所有消息都是共用一个payload对象

image.png 而kafka3.3.1则是每发送一次消息就重新生成一次payload

将压测命令完善并将压测逻辑修payload生成逻辑修改成与kafka2.6.1一致,重新打包成kafka-tools-3.3.1.jar放到kafka/libs下压测

./kafka-producer-perf-test.sh \
--topic test \
--num-records 10485760 \
--record-size 1024 \
--throughput -1   \
--producer-props bootstrap.servers=10.9.165.68:9092,10.9.64.103:9092,10.9.178.93:9092 \
partitioner.class=org.apache.kafka.clients.producer.RoundRobinPartitioner \
acks=1 \
batch.size=16384 \
linger.ms=5 \
compression.type=none \
buffer.memory=67108864 > ./producer.log 2>&1 &

2.6.1

image.png

3.3.1

image.png kafka3.3.1的速度已经与kafka2.6.1差不多,略有提升