kafka 单机/集群压力测试

添加:2021/04/22

修改: -

kafka单机压力测试

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

1.测试机磁盘IO瓶颈

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

image.png

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

image.png

关注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

FROM ubuntu:16.04
# 修改更新源为阿里云
ADD sources.list /etc/apt/sources.list
ADD kafka_2.12-2.5.1.tgz /
# 安装jdk
RUN apt-get update && apt-get install -y openjdk-8-jdk --allow-unauthenticated && apt-get clean all

EXPOSE 9092
# 添加启动脚本
ADD run.sh .
RUN chmod 755 run.sh
ENTRYPOINT [ "/run.sh"]

run.sh

#!/bin/bash

# 启动自带的zookeeper
cd /kafka_2.12-2.5.1
bin/zookeeper-server-start.sh config/zookeeper.properties &

# 启动kafka
sleep 3
bin/kafka-server-start.sh config/server.properties

sources.list

deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu xenial-security main restricted
deb http://mirrors.aliyun.com/ubuntu xenial-security universe
deb http://mirrors.aliyun.com/ubuntu xenial-security multiverse

目录结构如下:

./
├── dockerfile
├── kafka_2.12-2.5.1.tgz
├── run.sh
└── sources.list

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

测试结果

写入消息量级 分区数 写入消息数量/s MB/s 平均延迟 最大延迟
10W 1 39169.604387 records/sec 37.36 MB/sec 651.38 ms avg latency 1159.00 ms max latency
100W 1 116577.290744 records/sec 111.18 MB/sec 264.15 ms avg latency 548.00 ms max latency
1000W 1 145365.740202 records/sec 138.63 MB/sec 223.76 ms avg latency 1102.00 ms max latency
1000W 2 169241.965238 records/sec 161.40 MB/sec 191.89 ms avg latency 4675.00 ms max latency
1000W 3 180011.520737 records/sec 171.67 MB/sec 180.26 ms avg latency 4732.00 ms max latency
1000W 4 199612.751263 records/sec 190.37 MB/sec 162.44 ms avg latency 5892.00 ms max latency
1000W 5 197949.245813 records/sec 188.78 MB/sec 163.77 ms avg latency 8729.00 ms max latency

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

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

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

测试结果:

写入消息量级 分区数 写入消息数量/s MB/s 平均延迟 最大延迟
1000W 1 183096.528490 records/sec 174.61 MB/sec 177.43 ms avg latency 923.00 ms max latency
1000W 3 422922.393741 records/sec 403.33 MB/sec 76.06 ms avg latency 385.00 ms max latency
1000W 5 453638.178189 records/sec 432.62 MB/sec 69.35 ms avg latency 1708.00 ms max latency

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

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

image.png

你可能感兴趣的:(kafka 单机/集群压力测试)