Kafka多维度调优

news2024/11/25 2:43:22

优化金字塔

应用程序层面

框架层面(Broker层面)

JVM层面

操作系统层面

应用程序层面:应当优化业务代码合理使用kafka,合理规划主题,合理规划分区,合理设计数据结构;

框架层面:在不改动源码的情况下,从kafka参数配置入手,结合业务体量和运行数据进行调优

JVM层面:在出现明显缓慢和可能的内存溢出的情况下,结合业务代码情况和服务器能力调优堆内存,非堆内存,GC方式等参数,非必要不更改过多参数

操作系统层面:在服务器操作系统层面调优尽量减少kafka程序运行限制,关注文件描述符限制,Selinux限制,JDK版本等情况

操作系统调优

文件系统的选择上,可选择XFS和EXT4,生产环境推荐XFS,具备高性能和高伸缩性优点,最新的报道显示具备多级缓存的ZFS针对高IO的kafka有不错的效果,但并未大规模验证

Swap空间参数设置:尽量设置小一点,修改/etc/sysctl.conf文件,增加vm.swappiness=,防止Linux OOM Killer线程随意杀线程

文件描述符:ulimit -n不能设置过小,在topic数量稍大时就会出现Too Many File Open报错情况

控制进程可以拥有的内存映射区域的最大数量:vm.max_map_count,设置过小会出现内存溢出情况

操作系统页缓存:由于Kafka存储数据时只要数据到来Page Cache页缓存就会返回Ack给生产者,并不会直接落盘,还需要等待触发或手动刷盘操作进行持久化刷盘,此时操作系统的Cached大小必须超过一个日志段大小,Broker上对应参数为log.segment.bytes,越大消费者在消费时有更大概率在缓存页命中,避免频繁IO从硬盘读取数据。

JVM层面调优

image

image

(1)堆内存参数设置:kafka本身并不占用过多堆内存,6-8G相对合适,在kafka-server-start.sh设置KAFKA_HEAP_OPTS参数即可;更精确可以查看KafkaServer-gc.log,关注Full GC之后堆上存活大小的总量,从而可以将堆内存设置为这个值的2-2.5倍,可以使用图上命令进行手动GC
 
(2)GC选择器:博主kafka3.5.1版本的kafka集群使用openjdk11.0.X,默认G1收集器;在G1中Full GC是单线程运行,在生产环境中要尽量避免Full GC
 
(3)JDK选择:至少JDK1.8,推荐JDK11,kafka3.0推荐至少使用JDK11

框架调优(Broker层面)
(1)版本适配:尽量保持客户端版本和Broker端版本一致或尽量适配,以避免版本之间不一致问题导致的性能优化损失,如零拷贝等特性
 
(2)消息压缩方式:Broker端和Producer段的消息压缩方式应该保持一致,推荐lz4,第二选择gzip,如果设置得不一致会导致Broker付出大量额外的CPU性能用于解压和二次压缩
 
(3)num.io.thread:Handler线程用于执行业务处理,Acceptor线程用于接收网络请求,Processor线程用于建立网络连接和分发网络请求,Handler线程才是执行业务请求处理的线程,由Broker参数num.io.thread决定,数量越大执行线程越多,处理速度更快
 
(4)num.recovery.threads.per.data.dir:Broker重启后恢复线程数量,设置越大,追上数据进入ISR越快
 
(5)num.network.thread:The number of threads that the server uses for receiving requests from the network and sending responses to the network,增加这个线程参数就是提高收发网络请求的速度
 
(6)log.retention.bytes:日志保存时间,针对业务需求合理设置时间
 
(7)message.max.bytes:针对消息集合打包的大消息体业务,需要设置更大的参数
 
(8)num.replica.fetchers:副本数据同步线程,应当不超过cpu核数,通常设置为4-8即可

框架调优(Producer层面)
(1)消息发送确认机制:acks=all,通常情况下在生产环境设置为acks=1即Leader副本确认即可
 
(2)批量发送消息大小:batch.size= 发送到同一个分区消息的批次大小限制
 
(3)发送最大时延:linger.ms=,批量大小没有达到batch.size,最大允许时延

框架调优(Consumer层面)
(1)消息提交机制:如为保证消息不重复消费即手动提交消息
 
(2)消息数据批量大小:fetch.min.bytes,如果时延不敏感追求吞吐量,可设置得大一点

应用程序层面调优

(1)保证业务代码健壮性,保证容器不会出现过多bug导致反复重启诱发Kafka集群Rebalance
(2)不要频繁创建Producer和Consumer,建立的连接要Close;
(3)合理创建线程池进行连接复用
(4)合理利用多线程进行推送,消费消息

文章转载自:付同學

原文链接:https://www.cnblogs.com/iamxiaofu/p/18243430

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

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

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

相关文章

全面了解性格测试:探索你的内在世界

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 全面了解性格测试:探索你的内在世界 什么是性格测试? 定义和概念 🧠 …

2006-2024年款别克君越维修手册和电路图资料更新

经过整理,2006-2024年款别克君越(含君越混动版)全系列已经更新至汽修帮手资料库内,覆盖市面上99%车型,包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针…

Oracle 打开钱包 ORA-28368: cannot auto-create wallet

ORA-28368: cannot auto-create wallet 开启钱包抱错,看下钱包信息 SQL> select * from v$encryption_wallet;WRL_TYPE -------------------- WRL_PARAMETER -------------------------------------------------------------------------------- STATUS ------…

直播录制怎么录?(3个方法)

在数字化快速发展的今天,直播已经成为了一种重要的传播方式,无论是商业活动、教育培训,还是娱乐休闲,直播都展现出了其独特的价值。然而,直播的即时性也意味着一旦错过,就很难再次体验。这时,直…

RTSP/Onvif安防视频监控系统EasyNVR录像播放时间轴与设备时间对应不上的原因

视频安防监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入,并能对接入的视频流进行处理与多端分发,包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等多种格式。平台可提供视频实时监控直播、云端录像、云存储、录像检索与回看、告警等视频能力&#xf…

雷卯推出小封装高压防静电二极管SD60C

1. 高电压通讯信号线静电防护的为何有难度 高电压通讯信号线静电防护很多公司普遍可以做到1.8至36V,48V ESD静电防护,比如上海雷卯的36V ESD二极管SD36C,LC36CI,GBLC36C ,分别可以用于低数据速率到高数据速率静电防护。48V 的ESD二极管有SD4…

代码随想录算法训练营第二十二天| 235. 二叉搜索树的最近公共祖先、 701.二叉搜索树中的插入操作、 450.删除二叉搜索树中的节点

235. 二叉搜索树的最近公共祖先 题目链接:235. 二叉搜索树的最近公共祖先 文档讲解:代码随想录 状态:只会昨天的方法,没有想到利用二叉搜索树的性质。 思路: 如果当前节点的值同时小于 p 和 q 的值,说明 p …

从报名到领证:软考初级【信息系统运行管理员】报名考试全攻略

本文共计9991字,预计阅读33分钟。包括七个篇章:报名、准考证打印、备考、考试、成绩查询、证书领取及常见问题。 一、报名篇 报名条件要求: 1.凡遵守中华人民共和国宪法和各项法律,恪守职业道德,具有一定计算机技术…

USB设备编程

文章目录 问题1、为什么一接入 USB 设备, PC 机就能发现它?image.pngUSB 设备刚接入 PC 时,还没有编号;那么 PC 怎么把"分配的编号"告诉它?硬件框架2、软件框架usb发信号usb信号位填充反向不归零编码 发送/接…

毕业年薪20w起!25届最近5年南京信息工程大学自动化考研院校分析

南京信息工程大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近4年考研分数情况 四、近4年招生录取情况 五、最新一年分数段图表 六、历年真题PDF 七、初试大纲复试大纲 八、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、…

设置systemctl start kibana重启kibana

1、编辑kibana.service vi /etc/systemd/system/kibana.service [Unit] DescriptionKibana Server Manager [Service] Typesimple Useres ExecStart/home/es/kibana-7.10.2-linux-x86_64/bin/kibana PrivateTmptrue [Install] WantedBymulti-user.target 2、启动kibana # 刷…

13大最佳工程项目管理系统软件盘点

国内外主流的13款工程项目管理系统软件:Worktile、中建软件、泛微建筑项目管理软件、LiquidPlanner、Wrike、建文软件、广联达、Microsoft Project、泛普软件、Procore、Buildertrend、Fieldwire、Autodesk Construction Cloud。 在快速变化的工程领域,有…

ssh实验室设备管理系统

ssh实验室设备管理系统 实验室设备管理系统 管理员:通知管理、预约 借用模块、设备信息 维修模块等 教师和学生:预约实验室模块 技术: java ssh spring mysql 环境:idea java1.8 mysql5.7 源码➕数据库文件➕文档

Java云HIS医院管理系统源码 B/S架构 一体化电子病历系统源码 基于云端SaaS平台源码,采用B/S(Browser/Server)架构

“云”指系统采用云计算的技术和建设模式,具有可扩展、易共享、区域化、易协同、低成本、易维护、体验好的优势。“H”是医疗卫生,由原来医院 (Hospital)到现在的医疗卫生 (Healthcare),拓展了 H的内涵与外延。云 HIS 重新定义了医院信息系统…

表 达式树

》》》可以借助 LINQPad工具 using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using System.Transactions;namespace EFDemo {public cla…

直流遥控器DC10-100V 水泵电机远程遥控 SL3036降压恒压

水泵电机的远程遥控技术已经成为工业、农业以及民用领域不可或缺的重要一环。其中,直流遥控器DC10-100V以其出色的性能和广泛的应用领域,成为了市场上的一颗璀璨明星。而SL3036降压恒压技术的运用,更是为水泵电机的远程遥控提供了强有力的支持…

OpenGL-ES 学习(6)---- Ubuntu OES 环境搭建

OpenGL-ES Ubuntu 环境搭建 此的方法在 ubuntu 和 deepin 上验证都可以成功搭建 目录 OpenGL-ES Ubuntu 环境搭建软件包安装第一个三角形基于 glfw 实现基于 X11 实现 软件包安装 sudo apt install libx11-dev sudo apt install libglfw3 libglfw3-dev sudo apt-get install…

WPF学习(3)--不同类通过接口实现同种方法

一、接口概述 1.接口的概念 在C#中,接口(interface)是一种引用类型,它定义了一组方法、属性、事件或索引器,但不提供实现。接口只定义成员的签名,而具体的实现由实现接口的类或结构体提供。接口使用关键字…

Tita 360评估:有效 360度反馈流程的 10 大步骤

宣传过程 如果你的公司首次引入多方位反馈或 360 度反馈,那么向所有利益相关者描述这一流程至关重要。由于流程太新,很多人还不了解。确保参与该流程的每个人都了解其目的,以及将如何实施该流程和使用其结果。花时间在一对一会议、小组会议和…

6.每日LeetCode-数组类,找到所有数组中消失的数字(Go)

题目 448找到所有数组中消失的数字.go 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。 示例 1: 输入:nums [4,3,2,7,8,2,…