Flink 的集群资源管理
集群资源管理
一、ResourceManager 概述
1、ResourceManager 作为统一的集群资源管理器,用于管理整个集群的计算资源,包括 CPU资源、内存资源等。
2、ResourceManager 负责向集群资源管理器申请容器资源启动TaskManager实例,并对TaskManager进行集中管理。
3、当新的 Job 提交到集群后,JobManager 会向 ResourceManager 申请作业执行需要的计算资源,进而完成整个作业的运行。
二、ResourceManager 分类
在ResourceManager抽象实现类的基础上,分别实现了ActiveResourceManager、StandaloneResourceManager以及MesosResourceManager等子类。
其中ActiveResourceManager实现了动态资源管理,可以根据提交的作业动态选择启动或停止TaskManager实例。
目前支持TaskManager动态管理和启动的ResourceManager主要有KubernetesResourceManager和YarnResourceManager实现类。
三、ResourceManager 功能
ResourceManager通过实现ResourceManagerGateway接口,向其他组件提供RPC远程访问能力,如TaskManager服务和JobManager服务的ResourceManagerGateway会将RPC访问请求发送到ResourceManager服务中。
ResourceManager继承了FencedRpcEndpoint基本实现类,使得ResourceManager可以作为一个RpcEndpoint节点,通过ResourceManagerGateway接口提供给其他服务节点,使之能够以RPC的方式访问ResourceManager服务。
ResourceManager实现了LeaderContender接口,可以作为竞争节点让LeaderElectionService进行Leader节点的选举,保证整个集群ResourceManager组件服务的高可用。
四、ResourceManager主要成员变量
resourceld:ResourceManager对应的唯一资源ID。
jobManagerRegistrations:专门存储JobManager注册信息。其中Key为JoblD,Value为JobManagerRegistration,当启动JobManager服务时,就会将JobManager信息注册在jobManagerRegistrations实例中。
jmResourceldRegistrations:用于存储JobManager注册信息,与jobManagerRegistrations的区别在于Key为ResourcelD。
jobLeaderldService:用于获取Job Leader ID的服务,在开启的高可用集群中,当JobManager的Leader节点发生切换时,会借助jobLeaderldService获取当前作业有效的JobID和地址信息。
taskExecutors:注册在ResourceManager的TaskExecutor列表中,其中Key为TaskExecutor对应的ResourcelD,Value为WorkRegistration,即TaskExecutor向ResourceManager注册过程中所提供的信息。
taskExecutorGatewayFutures:专门存储TaskExecutorGateway的CompletableFuture对象,Key为TaskExecutor对应的ResourcelD,Value为CompletableFuture,用于获取TaskExecutorGateway,实现与TaskExecutor之间的RPC通信。
highAvailabilityServices:系统高可用服务,基于highAvailabilityServices服务支持组件高可用。
heartbeatServices:用于创建HeartbeatManager服务,和其他组件之间建立心跳连接。
fatalErrorHandler:系统异常错误处理,当ResourceManager出现异常时调用fatalErrorHandler处理异常错误。
slotManager:ResourceManager的内部组件,用于管理集群的可用Slot资源,同时接收并处理TaskExecutor的SlotReport。
clusterinformation:存储整个Flink集群共享的信息,包括blobServerHostname和blobServerPort等配置。
resourceManagerMetricGroup:ResourceManager的MetricGroup用于收集和ResourceManager相关的监控指标。
leaderElectionService:基于ZooKeeper实现的Leader选举服务,在这里用于实现ResourceManager组件高可用。
taskManagerHeartbeatManager:管理与TaskManager之间的心跳信息。
jobManagerHeartbeatManager:管理与JobManager之间的心跳信息。
clearStateFuture:用于停止ResourceManager后进行数据异步清理。
五、ResourceManagerGateway 接口详解
1、概述
ResourceManagerGateway 接口提供了 ResourceManager 需要的RPC方法,供其他集群组件调用。
2、调用关系图
例如在TaskExecutor中调用ResourceManagerGateway完成在ResourceManager中注册TaskExecutor的操作,通过对ResourceManagerGateway中提供的RPC方法进行梳理,得到JobManager、TaskExecutor、WebMonitorEndpoint和Dispatcher等组件与ResourceManagerGateway之间的RPC调用关系图。
JobManager、TaskExecutor、WebMonitorEndpoint和Dispatcher组件使用如下方法与ResourceManager服务进行交互
1.JobManager和ResourceManager的RPC调用
registerJobManager(): 在ResourceManager中注册JobManager服务,此时会在jobLeaderldService服务中添加注册的JobManager信息
requestSlot(): JobManager向ResourceManager申请运行Task所需的Slot资源。
heartbeatFromJobManager(): 用于在JobManager与ResourceManager之间建立长期的心跳连接
disconnectJobManager(): 根据JobID删除之前注册在ResourceManager中的JobManager信息,并且关闭JobManager与ResourceManager之间的RPC连接。
2.TaskExecutor和ResourceManager的RPC调用
heartbeatFromTaskManager(): 在TaskExecutor中调用heartbeatFromTaskManager()方法,构建TaskExecutor与ResourceManager之间的心跳连接。
disconnectTaskManager():停止TaskExecutor组件时会调用disconnectTaskManager()方法断开TaskExecutor与ResourceManager之间的RPC连接。
registerTaskExecutor(): 当新的TaskExecutor启动时,会调用该方法向ResourceManager注册TaskExecutor信息。
sendSlotReport(): 当TaskExecutor启动并注册成功后,会调用sendSlotReport()方法向ResourceManager上报SlotReport。SlotReport中包含TaskExecutor的资源数量和配置信息等内容。
notifySlotAvailable(): 当TaskExecutor中具有空闲Slot计算资源时,会调用notifySlotAvailable()方法通知ResourceManager将该Slot资源变为Available状态。
cancelSlotRequest(): 取消JobManager已经分配的资源。
3.Dispatcher和ResourceManager的RPC调用
requestResourceOverview(): 用于在Dispatcher中获取集群资源信息,包括集群中的TaskManager、numberRegisteredSlots以及numberFreeSlots数量。
requestTaskManagerMetricQueryServiceAddresses(): 从ResourceManager获取TaskManager的MetricQueryService路径,主要用于前端获取TaskManager的监控指标。
4.WebMonitorEndpoint和ResourceManager的RPC调用
requestTaskManagerinfo(): 用于获取TaskManager的相关信息,即TaskExecutor启动过程中注册在ResourceManager的信息,包括TaskExecutor的网关地址、端口以及TaskExecutor的硬件信息。
requestTaskManagerFileUpload(): 请求上传文件到BlobServer上,返回TransientBlobKey。
六、Slot计算资源管理
1、概述
ResourceManager内部主要通过SlotManager服务统一对整个集群的Slot计算资源进行管理。
Slot被称为资源卡槽,用于表示可以分配的最小计算资源单位,提交的Task最终会运行在Slot表示的计算资源中。
2、组件
1)SlotManager 包含了Register Slot和Free Slot两个键值对集合
其中Register Slot专门存储ResourceManager中所有已经注册的TaskManagerSlot信息,FreeSlot集合则存储了当前SlotManager中处于空闲状态且还没有被分配和使用的Slot集合。
/** Map for all registered slots. */private final HashMap<SlotID, TaskManagerSlot> slots;/** Index of all currently free slots. */private final LinkedHashMap<SlotID, TaskManagerSlot> freeSlots;
2)TaskManagerSlot对象包含了SlotID、ResourceProfile以及TaskExecutorConnection等信息
如果Slot被分配使用,在TaskManagerSlot中还会存储AllocationID和JobID等分配信息,表明当前Slot已经被指定JobID对应的JobManager使用。
3)SlotManager还包含了pendingSlotRequests 和 fulfilledSlotRequests 两个键值对集合
其中 pendingSlotRequests 存储了所有处于 pending 和 unfulfilled 状态的 Slot 请求。
fulfilledSlotRequests 存储了所有已经分配完成的Slot请求。
/** Map of fulfilled and active allocations for request deduplication purposes. */private final HashMap<AllocationID, SlotID> fulfilledSlotRequests;/** Map of pending/unfulfilled slot allocation requests. */private final HashMap<AllocationID, PendingSlotRequest> pendingSlotRequests;
Slot 资源申请都会以 PendingSlotRequest 的形式存储在 pendingSlotRequests 集合中,等待 SlotManager 根据当前集群的 Slot 资源进行分配。
当符合条件的 Slot 资源分配给指定的 PendingSlotRequest 后,会为其创建 Allocationld,并将分配了 Allocationld 和 Slotld 信息的SlotRequest 存储到 fulfilledSlotRequests 集合中。
3、流程图
1)Slot计算资源的注册和管理
1.概述
对Slot计算资源的注册和管理,主要是在TaskManager和ResourceManager服务之间进行的,TaskManager作为Slot计算资源的提供方,ResourceManager则作为Slot计算资源的接收和管理方,梳理TaskManager向SlotManager中注册Slot资源的整个过程。
2.流程
a)启动TaskManager后,调用ResourceManagerGateway.registerTaskExecutor()方法向ResourceManager中注册TaskManager连接信息。
b)创建TaskManager和ResourceManager之间的RPC连接,TaskManager调用ResourceManagerGateway.sendSlotReport()方法向ResourceManager发送SlotReport信息,接着ResourceManager调用SlotManager.registerTaskManager()方法,将TaskManager的资源信息写入SlotManager。
c)在SlotManager中根据SlotReport中的Slot信息创建TaskManagerSlot,并注册到SlotManager的HashMap<SlotID,TaskManagerSlot> slots集合中。
SlotManager含有HashMap<SlotID,TaskManagerSlot> slots和LinkedHashMap<SlotlD,TaskManagerSlot> freeSlots两个Slot集合。前者维护所有注册到SlotManager中的Slot计算资源,后者存储当前SlotManager中可用的Slot资源。
2)为作业申请Slot计算资源
1.概述
在SIotManager中完成SIot资源注册后,等待集群提交和运行作业。
JobManager通过调用ResourceManagerGateway中的相关方法为作业申请Slot计算资源。
2.流程
a)JobManager调用ResourceManagerGateway.requestSlot()方法向ResourceManager发起Slot计算资源申请。
b)ResourceManager内部会调用SlotManager.registerSlotRequest()方法,向SlotManager申请作业需要的Slot计算资源。
c)SlotManager中维护了HashMap<AllocationlD,PendingSlotRequest>pendingSlotRequests集合,将所有的PendingSlotRequest存储在该集合中,并根据SlotRequest的ResourceProfile匹配合适的Slot计算资源,然后对Slot进行分配。
当 SlotRequest 需要的 Slot 计算资源分配完毕后,将已经分配的 SlotlD 信息写入 HashMap<AllocationlD,SlotlD> fulfilledSlotRequests集合。
SlotManager 组件会对 Slot 进行统一的管理,在内部构建一个 Slot 计算资源池,有新的 Slot 注册时,会优先从 pendingSlotRequests 集合中获取处于 Pending 状态的 SlotRequest,并为该 SlotRequest 分配Slot计算资源。
3)流程图
相关文章:

Flink 的集群资源管理
集群资源管理 一、ResourceManager 概述 1、ResourceManager 作为统一的集群资源管理器,用于管理整个集群的计算资源,包括 CPU资源、内存资源等。 2、ResourceManager 负责向集群资源管理器申请容器资源启动TaskManager实例,并对TaskManag…...
STM32学习笔记
前言 今天开始学习STM32,公司封闭git网络,所以选择CSDN来同步学习进度,方便公司和家里都能更新学习笔记。 参考学习资料 江科大STM32教学视频: 江科大自动协STM32视频_哔哩哔哩_bilibili...

Java应用性能问题诊断技巧
作者:张彦东 参考:https://developer.aliyun.com/ebook/450?spma2c6h.20345107.ebook-index.28.6eb21f54J7SUYc 文章目录 (一)内存1.内存2.内存-JMX3.内存-Jmap4.内存-结合代码确认问题 (二)CPU1.CPU-JMX或…...

监控系列(六)prometheus监控DMHS操作步骤
一、监控的操作逻辑 给操作系统安装expect命令expect脚本执行dmhs_console脚本执行 cpt / exec 命令用脚本进行过滤字符串过滤dm_export读取脚本与当前日期作比较,然后返回差值 二、安装步骤 1. linux中Expect工具的安装及使用方法 https://blog.csdn.net/wangta…...

SLAM从入门到精通(dwa速度规划算法)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 要说搜路算法,这个大家都比较好理解。毕竟从一个地点走到另外一个地点,这个都是直觉上可以感受到的事情。但是这条道路上机…...

嵌入式实时操作系统的设计与开发(aCoral线程学习)
真正的RTOS,基本上没有做到进程,只是停留在多线程,因为多进程要解决很多问题,且需要硬件支持,这样就使得系统复杂了,从而就可能影响系统实时性。 线程之间是共享地址的,也就是说当前线程的地址…...

JAVA基础(JAVA SE)学习笔记(二)变量与运算符
前言 1. 学习视频: 尚硅谷Java零基础全套视频教程(宋红康2023版,java入门自学必备)_哔哩哔哩_bilibili 2023最新Java学习路线 - 哔哩哔哩 正文 第一阶段:Java基本语法 1. Java 语言概述 JAVA基础(JAVA SE)学习…...
chatgpt 接口 和 jupyter版本安装
一 接口代码 有时间继续测试 import openai # 填入你的api_key openai.api_key ""models openai.Model.list()# 定义API参数 params {role: "user", "content": }# 定义循环 while True:# 获取用户输入user_input input("请输入您的消…...

ubuntu20.04 nerf开山之作
源码 GitHub - yenchenlin/nerf-pytorch: A PyTorch implementation of NeRF (Neural Radiance Fields) that reproduces the results. 代码的相关解读 NeRF代码解读-相机参数与坐标系变换 - 知乎 原文题目:NeRF: Representing Scenes as Neural Radiance Field…...
Java 中实现单例模式
单例模式 单例模式,就是一个类在任何情况下绝对只有一个实例,并且提供一个全局访问点来获取该实例。 要实现单例,至少需要满足两个点: 私有化构造方法,防止被外部实例化造成多实例问题 提供一个静态方位作为全局访问点…...

标签页的使用
目录 1、引用TabSheet.h和TabSheet.cpp文件: 2、主窗口添加标签页: (1)、标签页的创建和属性更改 (2)、添加俩个标签页的类 (3)、主窗口添加成员变量 (4)…...

新一代开源语音库CoQui TTS冲到了GitHub 20.5k Star
Coqui TTS 项目介绍 Coqui 文本转语音(Text-to-Speech,TTS)是新一代基于深度学习的低资源零样本文本转语音模型,具有合成多种语言语音的能力。该模型能够利用共同学习技术,从各语言的训练资料集转换知识,来…...

CSS 效果:多列文字,第一行对齐,flex方式元素被挤压
如图效果:2列,第一列只有一行,第二列多行。要求第一行对齐 实现:使用flex 如果不配置flex-shrink的话,第一列会被挤压 给第一列:备注配置压缩属性: flex-shrink:0。 <!DOCTYPE…...

优维低代码实践:片段
优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 优维…...
【计算机网络】第一章、计算机网络体系结构
1.1计算机网络的组成与分类 1.计算机网络的组成 从不同的角度来看内容从组成上看硬件、软件、协议从工作方式上岸边缘部分、核心部分从功能上看通信子网、资源子网 2.计算机网络的分类 角度内容分布范围广域网、城域网、局域网、个域网传输技术广播式网络、点对点网络拓扑结…...
vr火灾逃生安全科普软件开展消防突击教育安全有效
VR火灾逃生自救虚拟体验是一种利用虚拟现实技术来模拟火灾逃生自救场景的教育工具。以下是这个体验的几个优点:VR消防安全体验馆的出现,为城市的安全教育开辟了新的途径。这种创新的体验方式,能够让市民在模拟的火灾场景中学习并掌握消防安全…...

Kafka SASL认证授权(五)ACL源码解析
Kafka SASL认证授权(五)ACL源码解析。 官网地址:https://kafka.apache.org/ 一、ACL检查流程解析 一起看一下kafka server的启动与监听流程: Kafka -> KafkaServer -> SocketServer、KafkaRequestHandler 其中KafkaServer做相关的初始化,包括SocketServer 与 han…...
logback-spring.xml 中根据不同的业务表示,分类打印到不同的文件夹、时区动态设置
logback-spring.xml 中根据不同的业务表示,分类打印到不同的文件夹、时区动态设置 logback-spring.xml 完整配置 <?xml version"1.0" encoding"UTF-8"?> <configuration debug"false" scan"true" scanPeriod&…...
linux系统编程之一
1)fcntl的使用方法 fcntl作用:可以用fcntl函数改变一个已打开的文件属性而不必重新打开文件; 堆排序是完全二叉树,但不是排序二叉树; 排序二叉树要求兄弟节点之间有大小关系,比如说左小右大; 堆排序仅要求…...

【LeetCode】《LeetCode 101》第十三章:链表
文章目录 13.1 数据结构介绍13.2 链表的基本操作206. 反转链表(简单)21. 合并两个有序链表(简单)24.两两交换链表中的节点(中等) 13.3 其它链表技巧160. 相交链表(简单)234. 回文链表…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...