压测实操--produce压测方案

九月2年前技术文章698

环境信息:

操作系统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


相关文章

ElasticSearch shard&replica机制梳理和创建index图解

ElasticSearch shard&replica机制梳理和创建index图解

1、shard&replica的机制梳理1个index包含多个shard。一个shard包含index的部分数据每个shard都是最小的工作单元,承载部分数据,lucene实例,完整的建立索引...

Keepalived安装部署

Keepalived安装部署

安装keepalivedyum 安装keepalivedyum install keepalivedkeepalived.conf配置文件进行调整,其中state设置主备状态,interface设置对...

详解迁云流程

详解迁云流程

一、现有云端环境梳理可以通过阿里云工单申请导出网络架构图,在图的信息上梳理阿里云现有架构二、制定迁移方案根据梳理的信息,确定实例迁移的方案,有夸账号迁移,跨地域迁移,IDC上云等不同场景。需要考虑的是...

等待事件latch: cache buffers chains 的分析与优化

等待事件latch: cache buffers chains 的分析与优化

等待事件latch: cache buffers chains 的分析与优化要理解latch: cache buffers chains并解决这个问题,就需要深入的了解Buffer Cach...

SpringBootWeb 篇-深入了解 SpringBoot + Vue 的前后端分离项目部署上线与 Nginx 配置文件结构(2)

SpringBootWeb 篇-深入了解 SpringBoot + Vue 的前后端分离项目部署上线与 Nginx 配置文件结构(2)

        3.0 在云服务器进行环境配置        将项目放到云服务器上运行,那么离不开项目所依赖的环境,比如...

PostgreSQL 源码部署

PostgreSQL 源码部署

说明本篇文章介绍 PostgreSQL 单机源码编译部署的详细步骤。1. 准备工作1.1 源码包下载进入 PostgreSQL 官网下载页面  选择 Source 栏目: 接着就进入源码版本目录,选择...

发表评论    

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