Kafka在Ubuntu上的性能测试流程
Kafka依赖Java环境,需安装JDK 1.8及以上版本:
sudo apt update
sudo apt install openjdk-17-jdk -y
java -version # 验证安装
从Apache官网下载最新稳定版Kafka(如3.5.0),解压至指定目录:
wget https://downloads.apache.org/kafka/3.5.0/kafka_2.13-3.5.0.tgz
tar -zxzf kafka_2.13-3.5.0.tgz -C /usr/local
cd /usr/local
ln -s kafka_2.13-3.5.0/ kafka # 创建软链接便于管理
bin/zookeeper-server-start.sh config/zookeeper.properties &
bin/kafka-server-start.sh config/server.properties &
创建用于性能测试的Topic(如perf-test),设置分区数(如1)和副本数(如1):
bin/kafka-topics.sh --create --topic perf-test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
Kafka提供了两个核心脚本用于性能测试:kafka-producer-perf-test.sh(生产者)和kafka-consumer-perf-test.sh(消费者)。
通过kafka-producer-perf-test.sh模拟消息生产者,测试发送吞吐量、延迟等指标。常用参数说明:
--topic:测试Topic名称;--num-records:发送消息总数(如100万条);--record-size:单条消息大小(如1000字节);--throughput:目标吞吐量(-1表示不限);--producer-props:生产者配置(如bootstrap.servers指定Broker地址)。示例命令(发送100万条1000字节的消息,不限吞吐量):
bin/kafka-producer-perf-test.sh --topic perf-test --num-records 1000000 --record-size 1000 --throughput -1 --producer-props bootstrap.servers=localhost:9092 acks=1
关键指标:
records/sec):每秒发送的消息数;avg latency):消息从发送到确认的平均时间(ms);error%):发送失败的消息占比。通过kafka-consumer-perf-test.sh模拟消息消费者,测试消费吞吐量、延迟等指标。常用参数说明:
--bootstrap-server:Broker地址;--topic:测试Topic名称;--messages:消费消息总数(如100万条);--fetch-size:每次拉取的数据量(如1MB);--threads:消费者线程数(如10个线程并行消费)。示例命令(消费100万条消息,每次拉取1MB,使用10个线程):
bin/kafka-consumer-perf-test.sh --bootstrap-server localhost:9092 --topic perf-test --messages 1000000 --fetch-size 1048576 --threads 10
关键指标:
records/sec):每秒消费的消息数;end-to-end latency):消息从生产者到消费者的总时间(ms);lag):未消费的消息数量(需结合kafka-consumer-groups.sh查看)。若需要更丰富的功能(如延迟分布、压缩测试),可使用rdkafka_performance(librdkafka提供的C/C++基准测试工具)。
sudo apt-get install build-essential libssl-dev libsasl2-dev zlib1g-dev
git clone https://github.com/edenhill/librdkafka.git
cd librdkafka
./configure
make
cd examples
gcc -o rdkafka_performance rdkafka_performance.c -I../src -L../src -lrdkafka -lpthread -lrt -lm
示例命令(发送10万条512字节的消息到benchmark Topic):
./rdkafka_performance -P -b localhost:9092 -t benchmark -c 100000 -s 512
常用参数:
-P:生产者模式;-b:Broker地址(多Broker用逗号分隔);-t:Topic名称;-c:消息总数;-s:单条消息大小;-z:压缩算法(如snappy、lz4,提升吞吐量)。示例命令(从perf-test Topic消费10万条消息,从最早偏移开始):
./rdkafka_performance -C -b localhost:9092 -t perf-test -g perf-consumer-group -c 100000 -o beginning
常用参数:
-C:消费者模式;-g:消费者组ID;-o:消费起始偏移(beginning表示最早,latest表示最新)。-l参数测量消息往返延迟(如-l 1000表示测量1秒内的延迟);-Y参数将统计数据输出到JSON文件(如-Y output.json),便于后续分析;-F参数指定配置文件(如-F kafka.conf),避免命令行过长。batch.size、linger.ms);acks配置(如acks=all会增加可靠性但降低吞吐量)、网络稳定性。batch.size(批量大小,默认16KB,可增大至1MB)、linger.ms(发送间隔,默认0ms,可增大至100ms)、compression.type(压缩算法,如lz4提升吞吐量);fetch.min.bytes(每次拉取的最小字节数,默认1字节,可增大至1MB)、fetch.max.wait.ms(拉取最大等待时间,默认500ms,可增大至1000ms)、消费者线程数(如--threads 10);ulimit -n 65536)、调整TCP参数(如net.core.rmem_max=2097152、net.core.wmem_max=2097152)、使用高性能存储(如SSD)。bin/kafka-topics.sh --delete --topic perf-test --bootstrap-server localhost:9092)。