最近需要做kafka性能测试,一般的比较省事的作法,是直接使用kafka自带的脚本,选个比较NB的机器做压测即可。jdk版本不能太低,否则可能出现下面的异常
Exception in thread "main" java.lang.UnsupportedClassVersionError: kafka/admin/TopicCommand : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: kafka.admin.TopicCommand. Program will exit.
但是网上搜索出来的结果,基本上都是kafka 8版本的,在实地测试中,kafka脚本测试不同版本创建的topic还是很有问题的,可能直接报错,所以记录下,防止走弯路。废话不多说,直接上脚本。
1. 测试前准备:创建topic
1.1 查看参数描述:./bin/kafka-topics.sh
1.2 创建topic,根据实际应用场景选择replication-factor和partitions
./bin/kafka-topics.sh --create --zookeeper zookeeper_1,zookeeper_2,zookeeper_3 --replication-factor 1 --partitions 1 --topic topic_name
1.3 查看创建topic的详细信息
./bin/kafka-topics.sh --describe --zookeeper zookeeper_1,zookeeper_2,zookeeper_3 --topic topic_name
2. producer测试: 主要不同kafka 8部分
2.1 首先看看参数:./bin/kafka-producer-perf-test.sh
usage: producer-performance [-h] --topic TOPIC --num-records NUM-RECORDS --record-size RECORD-SIZE --throughput THROUGHPUT --producer-props PROP-NAME=PROP-VALUE [PROP-NAME=PROP-VALUE ...] 脚本规范
optional arguments:
-h, --help show this help message and exit
--topic TOPIC produce messages to this topic
--num-records NUM-RECORDS
number of messages to produce
--record-size RECORD-SIZE
message size in bytes
--throughput THROUGHPUT
throttle maximum message throughput to *approximately* THROUGHPUT messages/sec
--producer-props PROP-NAME=PROP-VALUE [PROP-NAME=PROP-VALUE ...]
kafka producer related configuaration properties like bootstrap.servers,client.id etc..
参数producer-props可以并列填写多个参数,这里给个案例:
--producer-props bootstrap.servers=broker_1,broker_2,broker_3 acks=all
这里设定两个参数bootstrap.servers和acks,其他的都是默认,具体代表的意义,可以参看apache kafaka官网的documents>>producer config;
最后列个完整的producer测试脚本
./bin/kafka-producer-perf-test.sh --topic topic_name --throughput 100000 --num-records 100000 --producer-props --producer-props bootstrap.servers=broker_1,broker_2,broker_3 acks=all --record-size 1000
3. consumer测试
需要特别注意一点,就是在测试不同大小的消息队列时,最好使用不同的topic。完整流程最好这样:(1)确定测试的record-size = A1;(2)新建topic;(3)使用producer脚本和(2)的topic,脚本参数设定record-size = A1,产生足量的数据;(4)consumer测试,对应message-size = A1
按照和producer类似的方法,这里只列个脚本案例:
./bin/kafka-consumer-perf-test.sh --messages 100000 --topic topic_name --zookeeper zookeeper_1,zookeeper_2,zookeeper_3 --broker_1,broker_2,broker_3 --message-size A1
声明:转载请注明本文链接