Kafka之资源容量评估
编写目的意义
应用场景为如果有租户需要部署kafka集群,并给出业务压力,根据业务评估kafka资源情况,如cpu 磁盘 内存 带宽等维度。为业务解决因资源过小故障和新业务部署提供了参考和计算方法,减少后续的维护成本
资源容量评估
本文档只提供计算逻辑和评估模型,具体业务资源需求,需要根据下面逻辑严格计算和评估。Kafka需要大量cpu和内存,消耗都比较大。下面通过场景驱动的方式来深度剖析 Kafka 生产级容量评估方案如何分析,申请和实施。
kafka容量评估需求场景分析
场景说明
假设kafka集群平均承受1亿次日请求量,每天单次请求1条日志,每天总共的日志条数是1亿1条=1亿条。
每条日志大小约 : 0.5k-10k。 我们取10k。个别业务也有几十k的,极个别公司一条日志也有几MB的,比较少见。
每天总数据量 :1亿条 10k≈10亿k(每天产生数据量约等于953G)
高峰期计算 : 953G * 2倍=1907G。(峰值每天1907G数据量。极端情况可以乘以数十倍,根据业务场景评估)
kafka容量评估之磁盘
磁盘容量规划考虑因素:
- 每天消息量
- 新增消息数;
- 消息保留时长;
- 平均消息大小;
- 副本数;
- 消息是否启用压缩。
- 预留磁盘空间
机械硬盘 or 固态硬盘SSD
两者主要区别如下:
SSD的优点是速度快,日常的读写比机械硬盘快几十倍上百倍。缺点是单位成本高,不适合做大容量存储。
HDD的优点是单位成本低,适合做大容量存储,但速度远不如SSD。
首先SSD硬盘性能好,主要是指的随机读写能力性能好,非常适合Mysql这样的集群,而SSD的顺序读写性能跟机械硬盘的性能是差不多的。机械硬盘性价比高,完全可以满足集群的使用。Kafka 写磁盘是顺序追加写的,所以对于 kafka 集群来说,使用普通机械硬盘就可以了,除非有极端场景需求。如果预算充足可考虑SSD。
一堆普通磁盘(JBOD) 与 磁盘整列(RAID) 选择:JBOD,性价比高,使用没有问题。RAID,如果预算充足就考虑,可以提供冗余的数据存储空间,天然负载均衡。
每台服务器需要多少块硬盘
Kafka的每条消息都保存在实际的物理磁盘中,消息默认会被broker保存一段时间之后清除。
假设业务要求每个topic保留3个副本,那么每天业务数据量为1907G * 2倍=3814G
假设消息保留3天,那么每天业务实际存量为3814G * 3倍=11442G
假设根据磁盘容量安全需要,需要有20%的磁盘冗余,那么kafka集群全部磁盘空间一共为11442G/80%=14302G (14T)
根据评估结果一共需要存储14T数据,我们可以设置3节点kafka集群,大约每台机器需要存储5T数据。
kafka容量评估之内存
jvm堆内存评估
Kafka 读写数据的流程主要都是基于os cache,所以基本上 Kafka 都是基于内存来进行数据流转的,这样的话要分配尽可能多的内存资源给os cache。
kafka的核心源码基本都是用 scala 和 java (客户端)写的,底层都是基于 JVM 来运行的,所以要分配一定的内存给 JVM 以保证服务的稳定性。对于 Kafka 的设计,并没有把很多的数据结构存储到 JVM 中,所以根据业界最佳实践经验给 JVM 分配6~10G就足够。
物理内存评估
如果要保证这所有 partition 的最新的 .log 文件的数据都在内存中,这样性能当然是最好的,但是没有必要所有的数据都驻留到内存中,只保证10%左右的数据在内存中就可以了,这样大概需要953G* 10% = 95G内存,外加上面分析的JVM的6G*3=18G,总共需要113G内存。还要保留一部分内存给操作系统和业务高峰使用,我们需要给业务高峰留30%的内存,这样总内存大约需要113/70%=161G内存,再加上给操作系统留出12G内存。故我们选择173G内存的服务器是非常够用了,我们可选用64G内存型号机器,可以考虑选用3台即可。
kafka容量评估之CPU
CPU Core分析
我们评估需要多少个 CPU Core,主要是看 Kafka 进程里会有多少个线程,线程主要是依托多核CPU来执行的,如果线程特别多,但是 CPU核很少,就会导致CPU负载很高,会导致整体工作线程执行的效率不高,性能也不会好。所以我们要保证CPU Core的充足,来保障系统的稳定性和性能最优。
Kafka不算是cpu消耗型服务,不是计算密集型系统,应尽可能追求多核而非高时钟频率。但是如果client端启用了消息压缩,除了必要的CPU资源外,broker端也有可能需要大量的CPU资源。
还有kafka是否启用SASL等机制认证,也会消耗cpu。一个 kafka 服务启动后,会有至少100多个线程在跑。
kafka对计算处理应用场景,客户端为了优化网络和磁盘空间,会对消息进行压缩。服务器需要对消息进行批量解压,设置偏移量,然后重新进行批量压缩,再保存到磁盘上。
最重要、最消耗时间的就是下面3种线程:
如果单台服务器给 32 个 cpu core,建议分为24+8两个部分。
num.io.threads=8负责写磁盘的线程数,默认8,整个参数值要占总核数的 50%。24 * 50% = 12核
num.replica.fetchers=1副本拉取线程数,默认1,这个参数占总核数的 50%的 1/3。24 * 50% * 33% =4核
num.network.threads =3 数据传输线程数,默认3,这个参数占总核数的 50%的 2/3。24 * 50% *66% = 8核
以上共计24核,剩余8核给其他线程使用
kafka容量评估之带宽
Kafka是在网络间传输大量数据的分布式数据管道,带宽资源很重要,并且容易成为瓶颈。
kafka支持多个消费者,造成流入和流出的网络流量不平衡,从而让情况变得更加复杂。集群复制和镜像也会占用网络流量。如果网络接口出现饱和,那么集群的复制出现延时就在所难免。
总结起来,对于带宽资源的规划,你需要考虑以下几个因素:
- 网络带宽:根据网络环境确定每秒处理的数据量。
- 带宽利用率:根据实际情况确定 Kafka 服务器使用的带宽比例。
- 预留资源:为了避免网络丢包,额外预留一部分带宽资源。
- 数据处理目标:根据业务需求确定每秒需要处理的数据量。
- 消息复制:如果消息需要复制,考虑复制的数量。
我们目前服务器绝大多数都是万兆带宽。根据文档场景假设,Kafka集群每天处理数据量约等于953G,平台一天每小时要处理40G的数据,平均每秒处理11M数据。
假设需要带宽冗余,使用30%带宽应对网络突发情况。那么实际要求带宽为11M/70%=16M/s
假设每天服务器给kafka进程的带宽资源为60%,那么单台kakfa服务器带宽需要:16M/60%=27M/s
带宽单位是bit比特,1byte=8bit。实际上百兆带宽100Mbps/8 =12.5M/s。千兆带宽实际上125Mb/s。万兆带宽实际上1250Mb/s。
综上所述,单台物理机万兆带宽足够kafka集群使用。Kafka集群仍可选3台做业务支撑。
相关文章:
Kafka之资源容量评估
编写目的意义 应用场景为如果有租户需要部署kafka集群,并给出业务压力,根据业务评估kafka资源情况,如cpu 磁盘 内存 带宽等维度。为业务解决因资源过小故障和新业务部署提供了参考和计算方法,减少后续的维护成本 资源容量评估 …...
深度学习神经网络的7大分类
深度学习中的神经网络可通过其结构和功能分为多种类型,每种都针对特定的数据特征和应用场景进行了优化。 深度学习7大神经网络如下: 01 前馈神经网络(Feedforward Neural Networks, FNN): 这是最基本的神经网络形式…...
【DNF mysql8.0安装】DNF安装MySQL服务器教程
在基于Red Hat的Linux发行版中,如CentOS或Fedora,DNF(Dandified Yum)是包管理器,用于安装、更新和卸载软件包。以下是使用DNF安装MySQL服务器(也称为MySQL Community Server)的步骤:…...
决策树与随机森林在分类问题中的应用
决策树与随机森林在分类问题中的应用 分类问题是机器学习中的重要任务之一,它涉及将数据划分到预定义的类别中。在分类问题中,决策树与随机森林模型被广泛应用,凭借其直观性、强大的预测能力和稳定的泛化性能,成为了机器学习的经…...
Dmitri Shuralyov的全职开源之旅
本篇内容是根据2017年7月份Full-time Open Source 音频录制内容的整理与翻译 Dmitri Shuralyov 加入节目,谈论作为开源的全职贡献者、开发开发人员工具以及其他有趣的 Go 项目和新闻。 过程中为符合中文惯用表达有适当删改, 版权归原作者所有. Erik St. Martin: 欢迎…...
基于LSTM-Transformer混合模型实现股票价格多变量时序预测(PyTorch版)
前言 系列专栏:【深度学习:算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对…...
创建TaskPool任务组
实现任务的函数需要使用装饰器Concurrent标注,且仅支持在.ets文件中使用。 方法: taskpool.execute(任务名,执行权重优先级) import { taskpool } from kit.ArkTS//Concurrent 只能修饰全局函数 Concurrent async function getData(params1: string,…...
一文1800字从0到1浅谈web性能测试!
什么是性能测试? web性能应该注意些什么? 性能测试,简而言之就是模仿用户对一个系统进行大批量的操作,得出系统各项性能指标和性能瓶颈,并从中发现存在的问题,通过多方协助调优的过程。而web端的性能测试…...
计算机网络基础(1)
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络基础 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 计算机网…...
GNU/Linux - 宏处理工具M4
GNU M4 M4 "Macro Processor, Version 4". 1, Introduction to GNU M4 GNU M4 是传统 Unix 宏处理器的实现。它主要与 SVR4 兼容,但也有一些扩展功能(例如,处理超过 9 个位置参数的宏命令)。GNU M4 还内置了包含文件、…...
Oracle权限安全管理
实验内容 本次实验先使用system用户连接 温馨提示:题目要求切换账户登录的时候自己记得切换,本文章只提供相应的SQL语句 在表空间BOOKTBS1(实验4第1题已创建)创建一张表BOOKS,其字段如下:: SQL> create…...
C++笔记之静态多态和动态多态
C++笔记之静态多态和动态多态 code review! 在C++中,多态(Polymorphism)是面向对象编程的一个核心概念,允许对象以多种形式存在。多态性主要分为静态多态(Static Polymorphism)和动态多态(Dynamic Polymorphism)。下面将详细解释这两种多态及其在C++中的实现方式、优缺…...
Axure RP电商系统商城PC+app+后台买家卖端高保真原型模板及元件库
AxureRP电商商城PCapp后台买家卖端高保真原型模板本套包含三份原型图素材 APP买家端原型简介: 包含了用户中心、会员成长、优惠券、积分、互动社区、运营推广、内容推荐、商品展示、订单流程、订单管理、售后及服务等完整的电商体系功能架构和业务流程。 本模板由…...
RTX3070的yolo训练模型迁移到NVIDIA JETSON XAVIER NX 上的踩坑经验,时机部署避雷点
NVIDIA JETSON XAVIER NX 的yolo环境部署 首先为了保证yolo的权重模型pt文件可以顺利迁移过去,要保证torch和cuda的版本一致 如何在NX上安装torch? 1.用 jtop工具 实时查看和控制板子状态 安装: sudo -H pip3 install jetson-stats使用: sudo jtop 在这里是为…...
带你学习如何编写一篇API详设文档以及给新人提点建议
文章目录 前言先认清一个问题详设文档如何写先看文档脉络详设文档分析需求背景方案概述API定义安全设计性能设计缓存与数据库 总结 前言 这篇文章带读者了解软件开发项目中一个需求的开发详设文档主要包括哪些内容,其中重点会给读者分析API设计的规范,相…...
【Python爬虫实战】正则:多字符匹配、开头与结尾定位、分组技术详解
🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、匹配多个字符 (一)匹配任意多个字符 ࿰…...
DOIP协议介绍-1
1.DOIP中的GID和EID是什么? 在DOIP(Diagnostics over IP)中,GID(Group Identification)和EID(Entity Identification)是两个重要的标识符,它们各自承担着不同的角色和功…...
探索Python中的多线程与多进程
在Python编程中,多线程和多进程是两个重要的概念,它们被用来提高程序的执行效率。本文将深入探讨这两个概念,并对比它们在Python中的实现方式。 一、多线程 多线程是一种并发执行的程序设计方法。在Python中,我们可以使用thread…...
paypal php 实现详细攻略
一、准备工作 登录 https://www.paypal.com/ 注册一个主账号(选择个人账号、企业账后都可) 申请完成后登录https://developer.paypal.com/ 在后台右侧菜地点击“Accounts”,可以看到系统自动给分配的两个沙箱环境的账号。类型为Personal是个人…...
深入理解Dubbo原理鱼实现,提升职场竞争力
小熊学Java全能学习面试指南:https://www.javaxiaobear.cn 1、RPC RPC(Remote Procedure Call)远程过程调用,它是一种通过网络从远程计算机程序上请求服务。 大白话理解就是:RPC让你用别人家的东西就像自己家的一样。 RPC两个作用࿱…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决
问题: pgsql数据库通过备份数据库文件进行还原时,如果表中有自增序列,还原后可能会出现重复的序列,此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”,…...
PydanticAI快速入门示例
参考链接:https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...
CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx
“Reactive Stream Processing in Industrial IoT using DDS and Rx” 是指在工业物联网(IIoT)场景中,结合 DDS(Data Distribution Service) 和 Rx(Reactive Extensions) 技术,实现 …...
