由于业务需求,针对kafka在不同参数下的性能进行测试。从而进行kafka性能调优
测试目标
测试kafka 0.8n的性能(Producer/Consumer性能)。当消息大小、批处理大小、压缩等参数变化时对吞吐率的影响。
测试环境
软件版本:kafka 0.8.1.1
硬件环境:3台多云服务组成的kafka集群。各服务器CPU4核,内存16G,配置如下:
服务器IP:
203.150.54.215
203.150.54.216
203.150.54.217
测试方法
使用kafka官方提供的kafa-perf工具做性能测试
测试步骤
一、测试环境准备
1、测试工具kafka-perf的准备
cp kafka-perf_2.10-0.8.1.1.jar /application/kafka/libs/
2、启动kafka
cd /application/kafka
vim config/server.properties #内容见下图
./bin/kafka-server-start.sh --daemon config/server.properties
3、测试集群可靠性
创建一个主题,复制因子为3.
[root@203-150-54-215 kafka]# bin/kafka-topics.sh --create –zookeeper 203.150.54.215:21203,203.150.54.216:21203,203.150.54.217:21203 --replication-factor 3 --partitions 3 --topic 88
Created topic "88".
查看创建的主题分区情况
[root@203-150-54-215 kafka]# bin/kafka-topics.sh --describe --zookeeper 203.150.54.215:21203 --topic 88
Topic:88 PartitionCount:3 ReplicationFactor:3 Configs:
Topic: 88 Partition: 0 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2
Topic: 88 Partition: 1 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3
Topic: 88 Partition: 2 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1
在215上启动生产者
[root@203-150-54-215 kafka]# bin/kafka-console-producer.sh --broker-list 203.150.54.215:21204 --topic 88
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See #StaticLoggerBinder for further details.
test
hh
在216上进行消费
[root@203-150-54-216 kafka]# bin/kafka-console-consumer.sh --zookeeper 203.150.54.216:21203 --topic 88 --from-beginning
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See #StaticLoggerBinder for further details.
test
hh
从上可知:3个服务器集群之间链接正常,下面进行性能测试
kafka-producer-perf-test.sh中参数说明:
messages 生产者发送走的消息数量
message-size 每条消息的大小
batch-size 每次批量发送消息的数量
topics 生产者发送的topic
threads 生产者
broker-list 安装kafka服务的机器ip:porta列表
producer-num-retries 一个消息失败发送重试次数
request-timeouts-ms 一个消息请求发送超时时间
bin/kafka-consumer-perf-test.sh中参数说明:
zookeeper zk配置
messages 消费者消费消息的总数量
topic 消费者需要消费的topic
threads 消费者使用几个线程同时消费
group 消费者组名称
socket-buffer-sizes socket缓存大小
fetch-size 每次想kafka broker请求消费消息大小
consumer.timeout.ms 消费者去kafka broker拿一条消息的超时时间
二、测试生产者吞吐率
此项只测试producer在不同的batch-zie,patition等参数下的吞吐率,也就是数据只被及计划,没有consumer读取数据消费情况。
生成Topic:
生成不同复制因子,partition的topic
bin/kafka-topics.sh --zookeeper 203.150.54.215:21203 --create --topic test-pati1-rep1 --partitions 1 --replication-factor 1
bin/kafka-topics.sh --zookeeper 203.150.54.215:21203 --create --topic test-pati1-rep2 --partitions 1 --replication-factor 2
bin/kafka-topics.sh --zookeeper 203.150.54.215:21203 --create --topic test-pati2-rep1 --partitions 2 --replication-factor 1
bin/kafka-topics.sh --zookeeper 203.150.54.215:21203 --create --topic test-pati2-rep2 --partitions 2 --replication-factor 2
bin/kafka-topics.sh --zookeeper 203.150.54.215:21203 --create --topic test-pati3-rep1 --partitions 3 --replication-factor 1
bin/kafka-topics.sh --zookeeper 203.150.54.215:21203 --create --topic test-pati3-rep2 --partitions 3 --replication-factor 2
测试producer吞吐率
调整batch-size,thread,topic,压缩等参数测试producer吞吐率。
示例:
a)批处理为1,线程数为1,复制因子为1