kafka 单机/集群压力测试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kafka 单机/集群压力测试相关的知识,希望对你有一定的参考价值。

参考技术A

由于kafka吞吐量特别大,所以先考虑集群服务器的自身瓶颈,因为现在测试的是单机所以只会涉及到磁盘IO以及cpu,但是对于kafka来说对于cpu的使用还是可以忽略不计的,

1.1磁盘IO写入瓶颈
使用以下命令测试磁盘IO的写入瓶颈
sync;time -p bash -c "(dd if=/dev/zero of=test.dd bs=1M count=20000)"
说明: 在当前目录下创建一个test.dd的文件,写入20000个1M的数据
磁盘写入IO的结果
可以看到平均就是187MB/s

1.2 使用iostat命令监测磁盘io情况
使用命令
# iostat -x 1
说明: 扩展查看io性能,每秒刷新一次
注意: 如果没有iostat,请执行 yum install sysstat -y 进行安装 iostat命令

关注wkB/s和%util两个参数

wkB/s:每秒写入设备的数据量(单位:KB)

%util:消耗在I/O请求中的CPU时间百分比(设备带宽利用率)。如果该值接近100%说明设备出现了瓶颈。
如图现在这台机器的磁盘IO极限值为187MB/s

1.3 单机版测试kafka性能
因为测试的次数比较多,也没有去找kafka中数据存储设置,所以就使用docker部署单机版的kafka (因为测试的数据比较多,也就多次的删除了容器,重新启动镜像)
新建目录:
mkdir /usr/local/kafka_test
dockerfile

run.sh

sources.list

目录结构如下:

生成镜像
docker build -t kafka_test /usr/local/kafka_test
启动kafka
docker run -d -it kafka_test

测试结果

从表格中可以看出来五个分区就已经是极限了

结果分析
这中间并没有设置条数/每秒,所以就是按照kafka 就会按照量级自动的吞入数据,如果我们需要对于消息的即时性做控制,还需要再重新测试一下,按照业务的延迟找到最合适的数量(单机版,然后再部署集群,测试适合的数量)

集群测试:
部署就不再这里说明了
本次测试的是三台机器集群

测试结果:

之后还测试了9个分区的topic 因为空间不足所以就没有继续测下去,但是看部分数据还超过了500MB/s还是有上升空间的

1.3 磁盘IO 读取瓶颈
使用一下命令测试磁盘IO的读取瓶颈
hdparm -tT --direct /dev/vda
说明: hdparm命令是显示与设定硬盘的参数, -t参数为评估硬盘的读取效率(不经过磁盘cache), -T参数为评估硬盘的读取效率(经过磁盘cache).

kafka性能测试

一、介绍

Kafka官方在安装包的bin目录下提供了kafka-producer-perf-test.sh和kafka-consumer-perf-test.sh两个压力测试脚本,分别用于测试生产者和消费者的性能。通过Kafka压力测试脚本,能够得知Kafka集群的性能瓶颈所在(CPU/内存/网络带宽)等,在通常情况下Kafka集群的性能瓶颈是网络带宽

二、生产者压力测试

创建一个主题test

./kafka-topics.sh --create --zookeeper 116.62.13.104:2181 --topic test --partitions 2 --replication-factor 1

开始测试:

topic指定消息存放的topic :test
record-size是一条信息有多大(单位是Byte):200B
num-records是总共发送多少条信息 :10000
throughput是每秒多少条信息

./kafka-producer-perf-test.sh  --topic test --record-size 200 --num-records 10000 --throughput 1000 --producer-props bootstrap.servers=172.30.118.68:9092  
1791 records sent, 330.5 records/sec (0.06 MB/sec), 1465.8 ms avg latency, 3629.0 max latency.
1078 records sent, 208.8 records/sec (0.04 MB/sec), 5392.9 ms avg latency, 7718.0 max latency.
1848 records sent, 308.9 records/sec (0.06 MB/sec), 9319.5 ms avg latency, 11853.0 max latency.
1386 records sent, 261.9 records/sec (0.05 MB/sec), 13290.8 ms avg latency, 15757.0 max latency.
1078 records sent, 191.8 records/sec (0.04 MB/sec), 17191.0 ms avg latency, 20301.0 max latency.
924 records sent, 181.4 records/sec (0.03 MB/sec), 21931.1 ms avg latency, 24458.0 max latency.
770 records sent, 138.9 records/sec (0.03 MB/sec), 26450.5 ms avg latency, 29244.0 max latency.
10000 records sent, 235.726746 records/sec (0.04 MB/sec), 13813.99 ms avg latency, 32619.00 ms max latency, 12140 ms 50th, 31488 ms 95th, 32521 ms 99th, 32610 ms 99.9th.


10000 records sent, 235.726746 records/sec (0.04 MB/sec), 13813.99 ms avg latency, 32619.00 ms max latency, 12140 ms 50th, 31488 ms 95th, 32521 ms 99th, 32610 ms 99.9th.

结果分析:
发送记录数10000条,
每秒发送记录数235.726746条,
每秒发送数据量0.04 MB,
平均每条记录延迟 13813.99ms,
最大延迟 32619.00ms

三、消费者压力测试

zookeeper指定zookeeper集群,
topic指定消费的topic,
fetch-size指定每次取出的数据大小(单位为Byte)
messages总共消费的消息个数
threads 线程数量

./kafka-consumer-perf-test.sh --zookeeper 116.62.13.104:2181 --topic test --fetch-size 200 --messages 10000 --threads 1
start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec
2020-09-05 16:57:13:685, 2020-09-05 16:57:30:844, 1.9073, 0.1112, 10000, 582.7845

结果分析:
本次消费开始时间2020-09-05 16:57:13:685
本次消费结束时间2020-09-05 16:57:30:844
消费数据量 1.9073MB,
平均每秒吞吐 0.1112MB/s,
消费记录数 10000条,
平均每秒消费 582.7845


以上是关于kafka 单机/集群压力测试的主要内容,如果未能解决你的问题,请参考以下文章

大开测试:性能- 如何解决负载均衡将压力作用到一台机器(连载15)

3.本地集群部署与压力测试

rabbitmq压力测试结果

python 对mongodb进行压力测试

压力负载测试工具

ParseServer 应用程序的压力测试