kafka集群压测与优化

影响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.rhkb.cn/news/39677.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

熵,信息熵,香农熵,微分熵,交叉熵,相对熵

2019-07-13 https://blog.csdn.net/landstream/article/details/82383503 https://blog.csdn.net/pipisorry/article/details/51695283 https://www.zhihu.com/question/41252833 https://cloud.tencent.com/developer/article/1397504 按顺序查看更容易理解 0、背景 在信息论中…

【Hive】云任务大量卡住故障分析

项目场景: 上一章节我们简单介绍到了JVM调优相关的知识,本章节结合日常故障处理进一步说明相关的使用 问题描述 在云上,hive任务出现大面积卡住的现象,但并无任何报错信息,具体如下: 原因分析&#xff1…

Linux服务器出现异常和卡顿排查思路和步骤

目录 前言一、查看内存使用情况二、查看磁盘使用情况三、top命令3.1 jmap分析堆内存配置信息和使用情况3.2 jstack分析线程的执行情况3.3 jstat查看各个区域占堆百分比 四、其他指令总结 前言 Linux 服务器出现异常和卡顿的原因有很多,以下是一些常见的原因&#x…

熵、交叉熵和散度

熵 自信息 I(x) - log p(x) 对于分布为P(x)的随机变量X,自信息的数学期望 即熵H(X)定义为: 熵越高,随机变量信息越高,反之越少。不同概率分布对应熵如下:P p()熵10001/21/41/41/31/31/3 概率分布越均匀&#xff0…

【腾讯轻量应用服务器上部署kafka并通过flink读取kafka数据】

环境准备 经过1个月的摸索,最终选择在腾讯云上搭建一个学习环境。当时选择原因还是新用户有优惠(150左右3年),但现在看1核2g的配置勉强够用,建议后续小伙伴选择时最好是2核4g配置。 由于是单节点安装,需要准备如下资源&#xff1…

【Twitter Storm系列】flume-ng+Kafka+Storm+HDFS 实时系统搭建

技术交流群:59701880 深圳广州hadoop好友会 微信公众号:后续博客的文档都会转到微信公众号中。 一直以来都想接触Storm实时计算这块的东西,最近在群里看到上海一哥们罗宝写的FlumeKafkaStorm的实时日志流系统的搭建文档,自己也跟…

学习笔记之信息量、熵、KL散度、交叉熵的一些介绍

文章目录 信息量熵KL散度(相对熵)交叉熵参考 信息量 以前我也一直只是知道信息量的计算公式,也有想过为什么会是这样,但是因为要学的东西太多了,就没怎么深究,直到看了“交叉熵”如何做损失函数&#xff1…

AI产品经理是如何理解机器学习的(附注释)

本期目的:回顾之前敲代码的日常,利用生活场景帮助AI产品经理认识机器学习及学习过程中常用算法和评价指标。 适用读者:AI/数据产品经理。 阅读重点:品,细品,结合班级故事再品。 最近看了很多关于机器学习…

卢伟冰称小米今年库存会回到更健康水位 将加大门店整合调整

雷递网 乐天 3月25日 小米集团(股票代码为:1810)今日发布财报,财报显示,小米集团2022年营收为2800亿元,较上年同期的3283亿元下降14.7%。小米2022年经调净利为85亿元。 小米2022年第四季度营收为660.47亿元…

小米年营收2800亿:经调整利润85亿 电动汽车业务投入31亿

雷递网 雷建平 3月24日 小米集团(股票代码为:1810)今日发布财报,财报显示,小米集团2022年营收为2800亿元,较上年同期的3283亿元下降14.7%。 2022年,小米集团的境外市场收入为1378亿元&#xff0…

什么是低代码开发平台(apaas)?低代码开发平台的价值有哪些

手码6500字,带你快速看懂:什么是低代码开发平台(apaas),低代码有哪些价值,以及低代码平台的使用逻辑和心得。 一、什么是低代码开发平台(apaas)? 低代码开发平台是一种a…

详解如何在ChatGPT内构建一个Python解释器

这篇文章主要为大家详细介绍了如何在ChatGPT内构建一个Python解释器,文中的示例代码讲解详细,具有一定的学习价值,需要的可以参考一下 目录 引用:Art Kulakov 《How to Build a Python Interpreter Inside ChatGPT》 这个灵感来自…

如何画各种“图”?

我们在写文档过程中,多多少少都会画一些图来说明程序的功能,这篇文章就来说明一些常用的"图"怎么画。 1,画图工具 常用的有这么几种 Visio:这是很常用的,基本上的图都可以用这个来画。StarUML&#xff1a…

patreon cg人物插画作品合集分享

1、wlop大神作品4K-8K精选无水印图片http://theme.chengxuz.com/265.html 2、加拿大女画师sakimi chan作品1-98期插画http://theme.chengxuz.com/250.html 3、画师Mirco Cabbia插画作品合集欣赏http://theme.chengxuz.com/306.html 4、画师Sciamano240插画作品分享http://th…

如何画场景插画?场景插画的起稿、构图技巧!

如何画场景插画?绘画初学者如何构图?绘画初学者如何起稿?学习绘画难吗?怎样才能学好绘画?想必这些都是绘画初学者们经常在想的问题吧,就是不知道如何才能绘画好一个场景,不知道如何起稿也不知道…

手把手教你实现手绘风格图形

大家好,我是 漫步,今天分享一篇高难度的图形绘制文章。 Rough.js[1]是一个手绘风格的图形库,提供了一些基本图形的绘制能力,比如:虽然笔者是个糙汉子,但是对这种可爱的东西都没啥抵抗力,这个库的…

Python自动绘制UML类图、函数调用图(Call Graph)

文章目录 1. 引言2. 绘制UML类图2.1 安装graphviz2.2 安装pyreverse2.3 绘制UML类图 3. 绘制函数调用图3.1 安装graphviz3.2 安装pycallgraph3.3 使用示例第一种:从命令行调用第二种:从API调用 小结 1. 引言 在设计软件、分析代码时,我们常常…

房价预测2

学习: https://blog.csdn.net/u012063773/article/details/79349256 https://www.cnblogs.com/massquantity/p/8640991.html https://zhuanlan.zhihu.com/p/39429689 详解stacking过程 之前在房价预测1中对一些异常值进行了drop处理 后来在分割train和test的时候…

深圳二手房房价分析及预测

分析目标: 通过处理后的房价数据,筛选对房价有显著影响的特征变量。确定特征变量,建立深圳房价预测模型并对假设情景进行模拟 数据预处理 import pandas as pd import os file_path"D:\Python数据分析与挖掘实战\深圳二手房价分析\…

波士顿房价预测

目录 前言一、波士顿房价预测实战1-1、数据集介绍&数据集导入&分割数据集1-2、数据标准化1-3、构建网络1-4、K折交叉验证&取出所有的训练损失、训练平均绝对误差、验证损失、验证平均绝对误差1-5、计算平均mae&绘制验证mae分数&绘制验证loss分数1-6、找到最…