压测实操--produce压测方案

九月1年前技术文章391

环境信息:

操作系统centos7.9,kafka版本为hdp集群中的2.0版本。

Producer相关参数

使用Kafka自带的kafka-producer-perf-test.sh脚本进行压测,该脚本参数为:

图1.png

在producer涉及到性能的关键因素可能会存在如下几个:

thread:测试时的单机线程数;

bath-size:处理的数据批次大小;

ack:主从同步策略,在生产消息时特别需要注意,是follower收到后返回还是只是leader收到后返回,这对于吞吐量影响颇大;

message-size:单条消息的大小,要在producer和broker中设置一个阈值,且它的大小范围对吞吐量也有影响;

compression-codec:压缩方式,目前有不压缩,gzip,snappy,lz4四种方式;

partition:分区数,主要是和线程复合来测试;

replication:副本数;

througout:所需要的吞吐量,单位时间内处理消息的数量,可能对处理消息的延迟有影响;

linger.ms:两次发送时间间隔,满足后刷一次数据。

produce测试

目前kafka堆内存为1G下进行

图2.png

创建topic名称为test_kafka_perf1,partition=3、replication=3。

bath-size

bath-size=1000

./kafka-producer-perf-test.sh  --topic test_kafka_perf1     --num-records 100000000 --record-size 687 --producer-props bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667   batch.size=	1000   --throughput 30000


kafka指标

kafka仪表盘限制topic条件,获取仪表盘指标。

fetch请求延迟正增长,延迟在执行命令过程中逐渐增高

图8.png

produce请求延迟正增长,延迟在执行命令过程中逐渐增高

bath-size=2000

./kafka-producer-perf-test.sh  --topic test_kafka_perf1     --num-records 100000000 --record-size 687 --producer-props bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667   batch.size=2000   --throughput 30000

具体指标仪表盘与上述条件一致。

bath-size=10000

./kafka-producer-perf-test.sh  --topic test_kafka_perf1     --num-records 100000000 --record-size 687 --producer-props bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667   batch.size=10000   --throughput 30000

bath-size=20000

./kafka-producer-perf-test.sh  --topic test_kafka_perf1     --num-records 100000000 --record-size 687 --producer-props bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667   batch.size=20000   --throughput 30000

ack

ack=0

./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=0   --throughput 30000

ack=1

./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=1   --throughput 30000

ack=-1

./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=-1   --throughput 30000

message-size

record-size =687

./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records 100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=-1  --throughput 30000

record-size =454

./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records 100000000 --record-size 454  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=-1  --throughput 30000

compression-codec

compression.type=none

batch.size=5000,并发量在30000

./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=1 compression.type=none  --throughput 30000

batch.size=10000,并发量在50000

./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=10000 acks=1 compression.type=none  --throughput 50000

compression.type=gzip

batch.size=5000,并发量在30000

./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=1 compression.type=gzip  --throughput 30000

batch.size=10000,并发量在50000

./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=10000 acks=1 compression.type=gzip  --throughput 50000

compression.type=snappy

batch.size=5000,并发量=30000

./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=1 compression.type=snappy  --throughput 30000

compression.type=lz4

batch.size=5000,并发量=30000

./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=1 compression.type=lz4  --throughput 30000

partition

partition=1

./kafka-topics.sh --create  --zookeeper mutong01:2181,mutong02:2181,mutong03:2181  --topic test_kafka_perf1  --partitions 1 --replication-factor 1
./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=1 compression.type=lz4  --throughput 30000


partition=2

./kafka-topics.sh --create  --zookeeper mutong01:2181,mutong02:2181,mutong03:2181  --topic test_kafka_perf1  --partitions 2 --replication-factor 1
./kafka-producer-perf-test.sh  --topic test_kafka_perf2 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=1 compression.type=lz4  --throughput 30000

partition=3

./kafka-topics.sh --create  --zookeeper mutong01:2181,mutong02:2181,mutong03:2181  --topic test_kafka_perf1  --partitions 3 --replication-factor 1
./kafka-producer-perf-test.sh  --topic test_kafka_perf3 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=1 compression.type=lz4  --throughput 30000

replication

replication=1

./kafka-topics.sh --create  --zookeeper mutong01:2181,mutong02:2181,mutong03:2181  --topic test_kafka_perf1  --partitions 1 --replication-factor 1
./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=1 compression.type=lz4  --throughput 30000

replication=2

./kafka-topics.sh --create  --zookeeper mutong01:2181,mutong02:2181,mutong03:2181  --topic test_kafka_perf4  --partitions 1 --replication-factor 2
./kafka-producer-perf-test.sh  --topic test_kafka_perf4 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=1 compression.type=lz4  --throughput 30000


replication=3

./kafka-topics.sh --create  --zookeeper mutong01:2181,mutong02:2181,mutong03:2181  --topic test_kafka_perf5  --partitions 1 --replication-factor 3
./kafka-producer-perf-test.sh  --topic test_kafka_perf5 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=1 compression.type=lz4  --throughput 30000

throughput

./kafka-topics.sh --create  --zookeeper mutong01:2181,mutong02:2181,mutong03:2181  --topic test_kafka_perf1  --partitions 1 --replication-factor


throughput=10000

./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=1  --throughput 10000

throughput=30000

./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=1  --throughput 30000

throughput=50000

./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=1  --throughput 50000

throughput=80000

./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=1  --throughput 80000


throughput=100000

./kafka-producer-perf-test.sh  --topic test_kafka_perf1 --num-records  100000000 --record-size 687  --producer-props   bootstrap.servers=172.16.120.30:6667,172.16.120.36:6667,172.16.120.37:6667  batch.size=5000 acks=1  --throughput 100000

结论:

使用kafka自带的kafka-producer-perf-test.sh脚本对集群生产消息情况进行压测,根据业务情况设置要测试的num-records条数。不同的变量因素,通过修改其中一个变量条件,固定其余变量值,获取对应的吞吐速率。比如修改batch-size条件,其他变量保持不变,根据结果就可以获取每秒的生产消息大小和每秒的消费消息条数等指标,整理不同条件下的指标结果,形成曲线就可以观察具体的消费趋势。

比如batch-size条件下

batch-size

ack

message-size

compression-codec

partition

replication

throughput

mb/s

msgnum/s

1000

0

687

none

3

3

30000

13.1

17550

2000

0

687

none

3

3

30000

21.6

30540

5000

0

687

none

3

3

30000

21.2

30044

10000

0

687

none

3

3

30000

21.1

29987

20000

0

687

none

3

3

30000

21

30005

图12.png


相关文章

二进制日志(binlog)

二进制日志(binlog)

一、简介二进制日志(binlog)记录了数据库中所有的DDL和DML(除select语句)操作,语句以“事件”的形式保存,记录了数据库的更改变化,在主从复制和数据恢复中起着重要的作用。但要注意的一点是...

oracle自带存储过程的压测使用

1、使用前提条件:A、timed_statistics参数为true B、sysdba权限 C、11g及以上版本 D、ASYNCH_IO开启通过运行以下查询,确保为数据文件启用异步 I/OCOL NA...

Redis Sentinel与Cluster安装部署(一)

Redis Sentinel与Cluster安装部署(一)

1、部署规划版本redis5.0.8目录规划软件安装目录/usr/local/redis5可执行文件目录/usr/local/redis5/bin数据目录/usr/local/redis5/dada/...

MySQL性能优化(五)字符集不一致导致的隐式类型转换

MySQL性能优化(五)字符集不一致导致的隐式类型转换

上一篇文章中,我们介绍了隐式类型转换。这里我们介绍另一种形式的隐式类型转换,由于字符集不一致,导致关联查询无法使用索引。一个例子SELECT *  FROM funds...

keycloak部署和使用

keycloak部署和使用

简介Keycloak是一个开源软件产品,旨在为现代的应用程序和服务,提供包含身份管理和访问管理功能的单点登录工具。截至2018年3月,红帽公司负责管理这一JBoss社区项目,并将其作为他们RH-SSO...

MySQL 数据迁移中 lower_case_table_names 参数影响

MySQL 数据迁移中 lower_case_table_names 参数影响

记一次 SQLServer 迁移至 MySQL 遇到的一个关于 lower_case_table_names 参数的问题。前言   将 SQLServer 数据库迁移至 MySQL 迁移过后,驼峰命名...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。