本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。
本篇文章给大家谈谈kafka 性能测试,以及kafka性能测试实例对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
今天给各位分享kafka 性能测试的知识,其中也会对kafka性能测试实例进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
Kafka 性能测试
原文地址
kafka 性能测试: https://alphahinex.github.io/2022/06/19/kafka-perf-test/
description: "使用自带脚本进行性能测试"
date: 2022.06.19 10:34
categories:
- Kafka
tags: [Kafka, Java]
keywords: Kafka, Producer, Consumer, Performance, Test
在 Apache Kafka 安装目录的 bin 路径下
kafka 性能测试,包括启停服务在内的很多脚本。这些脚本能够帮助我们完成对 Kafka 的各类操作,其中就有对生产者和消费者进行性能测试的工具。
脚本分为两个版本:Linux 下执行的 Shell 脚本,以及 Windows 下执行的 bat 脚本。
以 Shell 脚本为例,可以查看脚本内容,除了停止 ZooKeeper 和 Kafka 服务的脚本外,其余脚本均会在最后调用 kafka-run-class.sh 并根据使用脚本的不同,传入不同的类进行处理。
本文主要涉及下面五个脚本:
可以先随便执行一个脚本查看一下是否能够正常执行脚本,如:
可参照如下命令,创建一个名为 hinex-topic 的主题,分区数为 6 ,副本数为 2 :
命令执行成功后,可以在消息代理的日志路径( <log.dirstopic-<partition_idx )中,看到分区的存储目录。本例中第一个分区在第三个消息代理节点上的存储路径为 /kafka/kafka-logs-kafka-sh-2/hinex-topic-0 。关于 Kafka 的记录存储结构,可阅读 【译】深入了解 Apache Kafka 存储内部 了解更多。
可通过脚本,在控制台中生产及消费消息,验证消息队列基本功能。
在一个终端窗口中启动生产者:
在另一个终端窗口中启动消费者:
此时在生产者中输入消息内容并回车,消费者终端窗口中可以接收到消息。
功能正常,接下来可以开始进行性能测试了。
由于测试用的主题中并没有什么消息记录,所以先进行生产者性能测试产生消息,再进行消费者性能测试。
可参照如下方式,使用 kafka-producer-perf-test.sh 脚本,约每秒钟产生 10 条消息,每条消息 1024 字节,共产生 200 条消息:
从执行结果中,可以看到消息发送的进度、每秒发送的消息数及数据量、平均延迟及最大延迟等统计信息。
如果想测试一下消息队列的吞吐量,可以将 --throughput 参数设为 -1 :
消费者性能测试可使用 kafka-consumer-perf-test.sh 脚本,如:
可通过 kafka-consumer-perf-test.sh --help 获得参数详细说明。
测试结束后,可将测试主题删除:
对照 Benchmarking Apache Kafka: 2 Million Writes Per Second (On Three Cheap Machines) 中场景,使用自带脚本进行一组实测。
每组测试使用 5 千万条记录,每条记录大小为 100 字节。
各场景结果汇总如下:
各场景运行过程记录如下。
三个终端同时执行如下命令(两个生产 1700 万数据,一个生产 1600 万数据):
各场景使用 6 分区 3 副本的主题,结果汇总如下:
各场景运行过程记录如下。
三个终端同时执行如下命令(两个消费 1700 万数据,一个消费 1600 万数据):
使用一个新的 6 分区 3 副本的主题,生产脚本和消费脚本同时执行。
引文:795,064 records/sec (75.8 MB/sec)
实测:738,836 records/sec (70.46 MB/sec)
生产者终端:
消费者终端:
Kafka性能测试方法及Benchmark报告
[TOC]
吞吐量是多少?
kafka高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
Kafka性能测试脚本
Kafka使用Yammer Metrics来报告服务端和客户端的Metric信息。Yammer Metrics 3.1.0提供6种形式的Metrics收集——Meters,Gauges,Counters,Histograms,Timers,Health Checks。与此同时,Yammer Metrics将Metric的收集与报告(或者说发布)分离,可以根据需要自由组合。目前它支持的Reporter有Console Reporter,JMX Reporter,HTTP Reporter,CSV Reporter,SLF4J Reporter,Ganglia Reporter,Graphite Reporter。因此,Kafka也支持通过以上几种Reporter输出其Metrics信息。
使用JConsole通过JMX,是在不安装其它工具(既然已经安装了Kafka,就肯定安装了Java,而JConsole是Java自带的工具)的情况下查看Kafka服务器Metrics的最简单最方便的方法之一。
首先必须通过为环境变量JMX_PORT设置有效值来启用Kafka的JMX Reporter。如export JMX_PORT=19797。然后即可使用JConsole通过上面设置的端口来访问某一台Kafka服务器来查看其Metrics信息,如下图所示。
使用JConsole的一个好处是不用安装额外的工具,缺点很明显,数据展示不够直观,数据组织形式不友好,更重要的是不能同时监控整个集群的Metrics。在上图中,在kafka.cluster-Partition-UnderReplicated-topic4下,只有2和5两个节点,这并非因为topic4只有这两个Partition的数据是处于复制状态的。事实上,topic4在该Broker上只有这2个Partition,其它Partition在其它Broker上,所以通过该服务器的JMX Reporter只看到了这两个Partition。
Kafka的一个核心特性是高吞吐率,因此本文的测试重点是Kafka的吞吐率。
本文的测试共使用6台安装Red Hat 6.6的虚拟机,3台作为Broker,另外3台作为Producer或者Consumer。每台虚拟机配置如下
CPU:8 vCPU, Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz,2 Sockets,4 Cores per socket,1 Thread per core
内存:16 GB
磁盘:500 GB
本文主要测试如下四种场景,测试的指标主要是每秒多少兆字节数据,每秒多少条消息。
Producer Number VS. Throughput
实验条件:3个Broker,1个Topic,6个Partition,无Replication,异步模式,消息Payload为100字节
测试项目:分别测试1,2,3个Producer时的吞吐量,多个Producer可同时向同一个Topic发送数据,在Broker负载饱和前,理论上Producer数量越多,集群每秒收到的消息量越大,并且呈线性增涨。本实验主要验证该特性。同时作为性能测试,本实验还将监控测试过程中单个Broker的CPU和内存使用情况
测试结果:使用不同个数Producer时的总吞吐率如下图所示
由上图可看出,单个Producer每秒可成功发送约128万条Payload为100字节的消息,并且随着Producer个数的提升,每秒总共发送的消息量线性提升,符合之前的分析。
性能测试过程中,Broker的CPU和内存使用情况如下图所示。
由上图可知,在每秒接收约117万条消息(3个Producer总共每秒发送350万条消息,平均每个Broker每秒接收约117万条)的情况下,一个Broker的CPU使用量约为248%,内存使用量为601 MB。
实验条件:3个Broker,1个Topic,6个Partition,无Replication,异步模式,3个Producer
测试项目:分别测试消息长度为10,20,40,60,80,100,150,200,400,800,1000,2000,5000,10000字节时的集群总吞吐量
测试结果:不同消息长度时的集群总吞吐率如下图所示
由上图可知,消息越长,每秒所能发送的消息数越少,而每秒所能发送的消息的量(MB)越大。另外,每条消息除了Payload外,还包含其它Metadata,所以每秒所发送的消息量比每秒发送的消息数乘以100字节大,而Payload越大,这些Metadata占比越小,同时发送时的批量发送的消息体积越大,越容易得到更高的每秒消息量(MB/s)。其它测试中使用的Payload为100字节,之所以使用这种短消息(相对短)只是为了测试相对比较差的情况下的Kafka吞吐率。
实验条件:3个Broker,1个Topic,无Replication,异步模式,3个Producer,消息Payload为100字节
测试项目:分别测试1到9个Partition时的吞吐量
测试结果:不同Partition数量时的集群总吞吐率如下图所示
由上图可知,当Partition数量小于Broker个数(3个)时,Partition数量越大,吞吐率越高,且呈线性提升。本文所有实验中,只启动3个Broker,而一个Partition只能存在于1个Broker上(不考虑Replication。即使有Replication,也只有其Leader接受读写请求),故当某个Topic只包含1个Partition时,实际只有1个Broker在为该Topic工作。如之前文章所讲,Kafka会将所有Partition均匀分布到所有Broker上,所以当只有2个Partition时,会有2个Broker为该Topic服务。3个Partition时同理会有3个Broker为该Topic服务。换言之,Partition数量小于等于3个时,越多的Partition代表越多的Broker为该Topic服务。如前几篇文章所述,不同Broker上的数据并行插入,这就解释了当Partition数量小于等于3个时,吞吐率随Partition数量的增加线性提升。
当Partition数量多于Broker个数时,总吞吐量并未有所提升,甚至还有所下降。可能的原因是,当Partition数量为4和5时,不同Broker上的Partition数量不同,而Producer会将数据均匀发送到各Partition上,这就造成各Broker的负载不同,不能最大化集群吞吐量。而上图中当Partition数量为Broker数量整数倍时吞吐量明显比其它情况高,也证实了这一点。
kafka 单机/集群压力测试
由于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/skafka 性能测试:每秒写入设备的数据量(单位:KB)
%util:消耗在I/O请求中的CPU时间百分比(设备带宽利用率)。如果该值接近100%说明设备出现kafka 性能测试了瓶颈。
如图现在这台机器的磁盘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 就会按照量级自动的吞入数据,如果kafka 性能测试我们需要对于消息的即时性做控制,还需要再重新测试一下,按照业务的延迟找到最合适的数量(单机版,然后再部署集群,测试适合的数量)
集群测试:
部署就不再这里说明了
本次测试的是三台机器集群
测试结果:
之后还测试了9个分区的topic 因为空间不足所以就没有继续测下去,但是看部分数据还超过了500MB/s还是有上升空间的
1.3 磁盘IO 读取瓶颈
使用一下命令测试磁盘IO的读取瓶颈
hdparm -tT --direct /dev/vda
说明: hdparm命令是显示与设定硬盘的参数, -t参数为评估硬盘的读取效率(不经过磁盘cache), -T参数为评估硬盘的读取效率(经过磁盘cache).
关于kafka 性能测试和kafka性能测试实例的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
kafka 性能测试的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于kafka性能测试实例、kafka 性能测试的信息别忘了在本站进行查找喔。
暂时没有评论,来抢沙发吧~