Flink 的集群资源管理

news2025/1/11 7:39:26
集群资源管理
一、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)流程图

在这里插入图片描述

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

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

相关文章

Modbus协议中浮点数的格式与换算

Modbus协议中浮点数&#xff08;单精度&#xff09;使用的是IEEE754标准浮点数(32位)的表示方法&#xff1a; IEEE754浮点数二进制格式示意图 1[31] 符号位(SIGN)8[23-30] 指数位(EXPONENT) 指数偏移量 12723[0-22] 尾数位(MANTISSA) 转换为10进制的公式&#xff1a; SGL (…

音视频技术开发周刊 | 315

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 OpenAI科学家最新演讲&#xff1a;GPT-4即将超越拐点&#xff0c;1000倍性能必定涌现&#xff01; GPT-4参数规模扩大1000倍&#xff0c;如何实现&#xff1f;OpenAI科学家…

数据结构复盘——第三章:栈和队列

文章目录 第一部分&#xff1a;栈1、栈的定义2、栈的操作 第一部分习题第二部分&#xff1a;共享栈1、共享栈的定义2、共享栈的操作 第二部分习题第三部分&#xff1a;链栈1、链栈的定义2、链栈的操作 第三部分习题第一到三部分小结1、顺序栈和链栈的比较2、栈的应用3、栈的应用…

正向代理流程

正向代理场景 已经拿下了一台服务器&#xff0c;该服务器有两个网卡&#xff0c;一个公网&#xff0c;一个私网未被攻击的服务器只有一个内网网卡&#xff0c;它不能和其他网段通信&#xff0c;只能在本网段通信&#xff0c;被叫做不出网主机攻击机需要直接连接未被攻击的服务器…

Shopee印尼站停止销售跨境商品:电商新规是否将改变印尼电商格局?

在全球电商市场竞争激烈的背景下&#xff0c;东南亚地区的印尼一直以其庞大的人口和不断增长的中产阶级而闻名。这个国家拥有着无限的潜力&#xff0c;吸引着各大电商平台争相进军。 然而&#xff0c;近期&#xff0c;一项关于电子商务的新法规引发了广泛的讨论和关注。据报道…

竞赛选题 深度学习YOLO安检管制物品识别与检测 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络4 Yolov55 模型训练6 实现效果7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习YOLO安检管制误判识别与检测 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&…

C++ 快速排序算法

1、快速排序 步骤&#xff1a; 确定分界点 通常选 Q[L]、Q[(LR)/2]、Q[R]调整范围 使左边的 <X 右边 > X 也就是 左右两边的指针&#xff0c;依次比较定义的分界点&#xff08;X&#xff09;根据比较大小调整顺序 依次递归处理左右两端 模板代码&#xff1a; // 数组…

ExoPlayer架构详解与源码分析(5)——MediaSource

系列文章目录 ExoPlayer架构详解与源码分析&#xff08;1&#xff09;——前言 ExoPlayer架构详解与源码分析&#xff08;2&#xff09;——Player ExoPlayer架构详解与源码分析&#xff08;3&#xff09;——Timeline ExoPlayer架构详解与源码分析&#xff08;4&#xff09;—…

计算机毕业设计--基于SSM+Vue的物流管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

Postman接口测试: postman设置接口关联,实现参数化

postman设置接口关联 在实际的接口测试中&#xff0c;后一个接口经常需要用到前一个接口返回的结果&#xff0c; 从而让后一个接口能正常执行&#xff0c;这个过程的实现称为关联。 在postman中实现关联操作的步骤如下&#xff1a; 1、利用postman获取上一个接口指定的返回值…

ICMP协议(一)

一 ICMP 说明&#xff1a; 了解大致内容即可,如果不是搞数通的只需要有个概念即可 小林 coding ① 概念 重点&#xff1a; ping、traceroute、mtr 主要是利用 ICMP 或者 UDP 的特性特点&#xff1a; ICMP 是TCP/IP协议簇的一个子协议,属于网络层 [三层]协议作用&#xff…

嵌入式开发常见的问题解决方法总结

本文引自 https://mp.weixin.qq.com/s/IBDnlzl_nFykemPxp7rt5w 一、问题复现 稳定复现问题才能正确的对问题进行定位、解决以及验证。一般来说&#xff0c;越容易复现的问题越容易解决。 (1) 模拟复现条件 有的问题存在于特定的条件下&#xff0c;只需要模拟出现问题的条件即…

外卖大数据案例

一、环境要求 HadoopHiveSparkHBase 开发环境。 二、数据描述 meituan_waimai_meishi.csv 是某外卖平台的部分外卖 SPU&#xff08;Standard Product Unit &#xff0c; 标准产品单元&#xff09;数据&#xff0c;包含了外卖平台某地区一时间的外卖信息。具体字段说明如下&am…

文件内容相关

1.查看文件 cat /etc/passwd 2.编辑文件 echo "i like dog" > qun.txt 标准输出重定向 echo "i like best cat" >> qun.txt 标准输出追加重定向 cat >> qun.txt cat >>qun.txt<< ene vim编辑 进入编辑模式 i 光标所在…

在unity中给游戏物体一个标记

标记 方便识别&#xff01; 标签&#xff08;Tag&#xff09; 引擎内部会对物体的标签建立了索引。通过标签查找物体&#xff0c;要比通过名字查找物体快得多。标签最多只能有 32个。前几个是常用标签&#xff0c;具有特定含义&#xff0c;例如玩家( Player)、主摄摄像机 (Mai…

【RTOS学习】优先级 | Tick | 任务状态 | 空闲任务 | 任务调度

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 优先级 | Tick | 任务状态 | 空闲任务 | 任务调度 &#x1f3c0;优先级⚽任务管理 &#x1f3c0;T…

PostMan使用csv/json进行数据参数化

创建csv文件 或者创建json文件 [{"name": "zhangsan","age": 18},{"name": "lisi","age": 20} ] 运行集合脚本的时候选择data文件 在请求接口中输入全局变量 {{user}}的方式进行传递 在Tests中要使用断言&…

C# Winform编程(4)多文档窗口(MDI)

多文档窗口&#xff08;MDI&#xff09; 添加菜单&#xff0c;IsMdiContainer设为True: From窗口添加菜单 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using S…

华为鸿蒙系统安装第三方软件 - 注意事项

华为鸿蒙系统安装第三方软件 - 注意事项 前言关闭增强防护关闭应用检测发现恶意软件解除软件管控 前言 华为鸿蒙系统默认开启纯净模式&#xff0c;仅支持安装经过华为应用市场检测的应用&#xff0c;并禁止运行病毒和风险应用。但此功能是可以关闭的&#xff0c;下文介绍如何安…

Qtday01(qt简介、简单窗口组件)

今日任务 仿qq登录界面&#xff0c;QT实现 代码&#xff1a; 头文件&#xff1a; #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QLineEdit> #include <QLabel> #include <QPushButton> #include <QtDebug> #…