kafka集群压测与优化

news2024/9/24 2:36:21

影响kafka集群性能的因数有多个,网络带宽、cpu、内存、磁盘读写速度、副本数、分区数、broker数量、内存缓存等因素都会影响kafka集群的性能

1.优化kafka集群配置

server.properties配置文件优化

num.network.threads=4
num.io.threads=4
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
num.recovery.threads.per.data.dir=1
log.retention.hours=72

num.network.threads:网络线程数,建议设置为CPU核心数的2倍

num.io.threads:磁盘I/O线程数,建议设置为CPU核心数的2倍

num.recovery.threads.per.data.dir:数据目录用来日志恢复的线程数目,配置多线程可加快恢复速度

log.retention.hours:消息保留时间,不适宜保留太长

socket.send.buffer.bytessocket.receive.buffer.bytes这两个参数控制Kafka Broker与客户端之间的TCP缓冲区大小,建议将它们设置为128KB或256KB,也可以通过以下的方式计算

假设如果您的网络带宽为1Gbps,消息大小为10KB,磁盘吞吐量为100MB/s,可用内存为8GB,则可以计算出以下缓冲区大小:

socket.send.buffer.bytes1Gbps / 8 = 125MB/s,因此可以将其设置为1MB

socket.receive.buffer.bytes100MB/s / 8 = 12.5MB/s,因此可以将其设置为128KB

producer.properties配置文件优化

compression.type=lz4
batch.size=16384
linger.ms=5
buffer.memory=33554432

compression.type这个参数控制消息的压缩方式,如果您的应用程序发送大量的消息,则可以将其设置为gzipsnappy,以减少网络带宽和磁盘使用,一般设置为lz4,用以提升性能

buffer.memory:默认值是 32MB,可以根据实际情况来调整这个值。如果你的应用程序需要发送大量的消息,可以将 buffer.memory 设置为较大的值,例如 1GB,这样可以确保 Producer 有足够的内存缓存消息,但也会消耗更多的内存资源。如果你的应用程序发送的消息比较少,可以将 buffer.memory 设置为较小的值,例如 64MB,这样可以节省内存资源

batch.size:表示每个批次(batch)的大小,即在 Kafka Producer 发送数据时,会将数据先缓存在内存中,当缓存的数据大小达到 batch.size 时,Producer 才会将这些数据一次性发送出去,默认值为 16KB

linger.ms:表示消息在缓存区中等待发送的时间,即如果数据没有达到 batch.size,但是等待了 linger.ms 时间后,Producer 也会将这些数据发送出去,默认值为 0,即数据必须立即发送

这两个参数的配置对 Kafka Producer 性能和消息延迟都有影响。较小的 batch.size 和较大的 linger.ms 可以降低消息延迟,但可能会降低吞吐量;而较大的 batch.size 和较小的 linger.ms 可以提高吞吐量,但可能会增加消息延迟

这两个参数的一些优化见解

1.如果你的应用程序需要低延迟,可以将 batch.size 设置为较小的值,例如 1KB,并将 linger.ms 设置为 0,这样可以尽快将消息发送出去,但可能会影响吞吐量

2.如果你的应用程序需要高吞吐量,可以将 batch.size 设置为较大的值,例如 64KB,并将 linger.ms 设置为较小的值,例如 5ms,这样可以提高吞吐量,但可能会增加消息延迟

3.如果你的应用程序需要同时兼顾延迟和吞吐量,可以将 batch.size 和 linger.ms 都设置为适当的值,例如 16KB 和 10ms

4.如果你的消息大小比较固定,可以根据消息大小来调整 batch.size 的大小,例如如果消息大小为 1KB,可以将 batch.size 设置为 10KB,这样可以确保每个批次中有足够的消息,但不会浪费太多内存

总的来说还是需要根据数据的实际场景来配置,逐步去调整大小,然后观察并发量和延迟,以达到最优的效果

kafka-server-start.sh 启动项的优化

调整 JVM 参数

KAFKA_HEAP_OPTS="-Xmx4G -Xms4G"

一般HEAP 大小不超过主机内存的50%

副本数的优化,一般配置3个,副本数太少不安全,副本数太多,同步数据会占用性能

分区数的优化,按道理来说分区数越大,写入数据的并发量就越大

kafka集群节点数量优化,节点数越多,性能越强大

2.压测kafka集群

首先得另外搭建一台kafka主机,执行压测脚本必须有kafka服务,最好搭建一个zabbix,监控kafka集群主机,可以更好的看出cpu、磁盘io、内存、网络哪一个到达了瓶颈

搭建zabbix参考:zabbix搭建_Apex Predator的博客-CSDN博客

配置监控主机参考:zabbix监控linux主机_Apex Predator的博客-CSDN博客

 搭建单节点kafka:kafka单节点快速搭建_Apex Predator的博客-CSDN博客

 在kafka集群中分别创建3分区的主题和6分区的主题副本数都设置为3看一下压测情况

bin/kafka-topics.sh --create --bootstrap-server 10.1.60.112:9092 --partitions 3 --replication-factor 3 --topic apex

bin/kafka-topics.sh --create --bootstrap-server 10.1.60.112:9092 --partitions 6 --replication-factor 3 --topic cs 

在新建的单节点上执行生产者的压测命令 

 bin/kafka-producer-perf-test.sh --topic apex --producer-props bootstrap.servers=10.1.60.112:9092,10.1.60.114:9092,10.1.60.115:9092 --record-size 1024 --num-records 1000000 --throughput -1

命令解析

--producer-props:指定 Kafka Producer 的配置参数,其中 bootstrap.servers 表示 Kafka Broker 的地址,多个 Broker 地址用逗号分隔

--record-size:每个请求的大小单位为字节,1024字节,即1kb

--num-records:总共 请求的数目,1000000个请求

--throughput:指定 Producer 的吞吐量,单位是消息数/秒。默认值为 -1,表示尽可能快地发送消息

  bin/kafka-producer-perf-test.sh --topic cs --producer-props bootstrap.servers=10.1.60.112:9092,10.1.60.114:9092,10.1.60.115:9092 --record-size 1024 --num-records 1000000 --throughput -1

 先来说一下上面输出的意思是什么

records sent:每秒发送的请求数

records/sec:平均每秒的流量值

avg latency:最小延迟时间

max latency:最大延迟时间

分析对两个不同分区数据的topic进行压测的数据可以看到,3分区的topic平均每秒并发6万左右,6分区的topic平均每秒并发10万左右,所以说分区数越大并发量就越大

看一下zabbix监控下kafka集群主机的性能消耗

 

可以看到并未达到瓶颈,一般来说测试生产者为单节点,更容易达到网络瓶颈,所以建议使用多台生产者机器同时对kafka压测更能测试出kafka集群的极限

在新建的单节点上执行消费者的压测命令 

bin/kafka-consumer-perf-test.sh --topic apex --broker-list 10.1.60.112:9092,10.1.60.114:9092,10.1.60.115:9092 --fetch-size 10000 --messages 1000000 --threads 1

 命令解析

--fetch-size:指定每个拉取请求(fetch request)拉取的最大字节数,这里为"10000"字节

--messages:指定要消费的消息数量,这里为"1000000"条消息

--threads:指定用于消费消息的线程数,这里为"1"个线程,线程数量也会影响消费性能

 bin/kafka-consumer-perf-test.sh --topic cs --broker-list 10.1.60.112:9092,10.1.60.114:9092,10.1.60.115:9092 --fetch-size 10000 --messages 1000000 --threads 1

 先来说一下上面输出的意思是什么

start.time:测试开始时间

end.time:测试结束时间

data.consumed.in.MB:总的消费数据量,单位为MB

MB.sec:消费数据的速率,单位为MB/s

data.consumed.in.nMsg:消费的消息数量

nMsg.sec:消费消息的速率,单位为条消息/s

rebalance.time.ms:消费者重新平衡所需的时间,单位为毫秒

fetch.time.ms:拉取消息所需的时间,单位为毫秒

fetch.MB.sec:拉取数据的速率,单位为MB/s

fetch.nMsg.sec:拉取消息的速率,单位为条消息/s

通过消费以上两个不同topic可以看出,分区数量大小对消费的并发量也有影响,以上的数据不是kafka集群的性能极限,而是消费者节点的性能极限,若是使用多个消费者可以更好的测出kafka集群的极限性能

消费者节点网络性能接近极限值

 kafka集群网络性能还远远没有达到极限

 

 

本人搭建的kafka集群主机单节点配置为4核cpu12GB内存100GB机械磁盘 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/464593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

提升供应链运营效率:企业如何规范化供应商关系?

在现代企业运营中,采购和供应链管理已成为至关重要的环节。企业尤其需要管理好自身供应商,才能够获得优质的原材料和零部件,并确保生产和销售的正常进行。本文将从供应商的筛选、双方合作的流程管理、团队建设等方面,为大家介绍如…

腾讯云COS+SpringBOot实现文件上传下载功能

文章目录 第一步:在.yml文件中配置对应秘钥内容第二步:完成COSConfig类编写第三步:编写Controller类Bug提示: 最近一直在做一个项目,需要支持视频,音频,图片的上传,前面介绍的都是把…

新一代边缘计算盒子,英码科技边缘计算盒子SY-E160

SY-E160 是英码科技推出的新一代智能工作站,内部集成了 4 核强悍处理器 A551.5 GHz,其内置的算力核拥有 16Tops 超强算力。SY-E160 工作站采用低功耗技术设计,支持 宽温度环境工作,可以灵活部署于各种 AI 场景中。 SY-E160 深元 A…

在SaleSmartly管理客户互动的 3 个好处

交互是关系的小组成部分。随着时间的推移,互动的质量决定了人们对这段关系的投入程度,同样的动态也适用于客户和品牌。在跨境电商业务中,每一次互动都是建立信任或失望的机会。 对于许多公司来说,客户互动的主要领域是客户服务功能…

机器学习 - Seaborn 练习, 常见功能查阅

机器学习记录 Seaborn Seaborn 是一个基于 Matplotlib 的 Python 可视化库,提供了一些内置数据集以及进行统计数据可视化和模型现场的 API。 sns.get_dataset_names() 方法会返回一个字符串列表,包含所有内置数据集的名称 练习 Seaborn 依赖Matplotlib, NumPy, SciPy, Pan…

python装不上库的心得

如果在相同的环境下别人能安装上,但你安装不上,可以考虑下面几点 目录 1 升级pip 2 有的包不用刻意装,它跟着别的就一起装了 3 缺少外部依赖 4 有的库用conda安装要方便一点 5 导入名不一定是包名 6 编译安装 7 安装包时&…

西门子S7-1500与FANUC机器人进行EtherNetIP通信的具体方法示例

西门子S7-1500与FANUC机器人进行EtherNetIP通信的具体方法示例 具体方法可参考以下内容: 以下示例中TIA博途的版本为V17,本例中PLC做主站,机器人做从站 一、 西门子PLC一侧的组态设置和编程 首先,我们需要到下载所需的EtherNetIP通信库文件,大家可自行百度获取或者从以下链…

Kafka的核心概念

一、消息(Record) 消息是 Kafka 中最基本的数据单元。消息由一串字节构成,其中主要由 key 和 value 构成,key 和 value 也都是 byte 数组。消息的真正有效负载是 value 部分的数据。为了提高网络和存储的利用率,生产者…

TCP流量控制与拥塞控制

什么是流量控制 一条TCP连接的每一侧主机都为该连接设置了接收缓存。当该TCP连接接收到正确的、有序的报文段,就会将数据放入接收缓存。相关联的应用会从缓存中读取数据。 如果发送者发送数据过快、过多,而接收方的应用程序从缓冲区读取的速度较慢&…

【C++】二叉搜索树经典OJ题目

文章目录 根据二叉树创建字符串二叉树的层序遍历二叉树的层序遍历II二叉树的最近公共祖先二叉搜索树与双向链表从前序与中序遍历序列构造二叉树从中序与后序遍历序列构造二叉树二叉树的前序遍历(非递归)二叉树的中序遍历(非递归)二叉树的后序遍历(非递归) 根据二叉树创建字符串…

捷报连连丨小匠物联SILA第六届“智光杯”荣获两项跨界大奖

2023年4月26日,SILA第六届“智光杯”跨界奖项名单公布。 喜讯传来,小匠物联荣获SILA第六届“智光杯”跨界奖项-全屋智能及商用系统优秀新供应链奖、智能照明新锐优秀新供应链奖。 “智光杯”“智光杯”由上海浦东智能照明联合会(SILA&#xf…

【校招VIP】简历上项目名称看起来不重复,是安全相关项目,但是为什么简历通过率还是低?

在简历指导的直播里面,我看了一个新的项目。 这是个信息安全方向的一个项目,之前倒是没有看过。 所以项目的介绍本身是看不出它的重复度的。 但是一往下看 12345的要点,就发现这又是一个烂大街的。 项目本身的逻辑是没有写的。 然后又是所…

【Linux脚本篇】shell变量的使用

目录 🍁shell变量替换 🍁定义变量 🍁shell变量运算 🍂整数运算 🍂小数运算 🦐博客主页:大虾好吃吗的博客 🦐专栏地址:Linux从入门到精通 shell变量替换 ${变量#匹配规则}…

设计模式 -- 访问者模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

SpringCloud入门实战(七)-Hystrix服务降级

📝 学技术、更要掌握学习的方法,一起学习,让进步发生 👩🏻 作者:一只IT攻城狮 。 💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看&…

三翼鸟:传统品牌只盯局部,智慧品牌谋划全局

“当今企业之间的竞争,不是产品之间的竞争,而是商业模式之间的竞争。”很多人都听过现代管理学之父德鲁克的这句话,但又有多少人真正理解了它? 以当下的语境去看,这里其实就是“自利”和“共荣”的区别。前者&#xf…

多臂老虎机问题

1.问题简介 多臂老虎机问题可以被看作简化版的强化学习问题,算是最简单的“和环境交互中的学习”的一种形式,不存在状态信息,只有动作和奖励。多臂老虎机中的探索与利用(exploration vs. exploitation)问题一直以来都…

Zabbix“专家坐诊”第189期问答汇总

问题一 Q:您好,为什么在shell脚本中,不写mysql命令的绝对路径,zabbix获取不到输出的值? A:mysql默认命令是针对root等有权限才能直接使用的,其他用户要使用要指定命令路径。 Q:zab…

SLB负载均衡haproxy的安装及使用

1.介绍 HAProxy是什么 HAProxy是一个免费的负载均衡软件,可以运行于大部分主流的Linux操作系统上。 HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力,具备丰富的功能。HAProxy的社区非常活跃,版本更新快速(最新稳定版1.7.2于2…

【剧前爆米花--爪哇岛寻宝】网络互连,网络通信和网络分层

作者:困了电视剧 专栏:《JavaEE初阶》 文章分布:这是一篇关于网络初识的文章,在这篇文章中讲解了局域网广域网,IP地址,端口以及网络分层等相关内容,希望对你有所帮助! 目录 网络互连…