当前位置: 首页 > news >正文

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 作为统一的集群资源管理器&#xff0c;用于管理整个集群的计算资源&#xff0c;包括 CPU资源、内存资源等。 2、ResourceManager 负责向集群资源管理器申请容器资源启动TaskManager实例&#xff0c;并对TaskManag…...

STM32学习笔记

前言 今天开始学习STM32&#xff0c;公司封闭git网络&#xff0c;所以选择CSDN来同步学习进度&#xff0c;方便公司和家里都能更新学习笔记。 参考学习资料 江科大STM32教学视频&#xff1a; 江科大自动协STM32视频_哔哩哔哩_bilibili...

Java应用性能问题诊断技巧

作者&#xff1a;张彦东 参考&#xff1a;https://developer.aliyun.com/ebook/450?spma2c6h.20345107.ebook-index.28.6eb21f54J7SUYc 文章目录 &#xff08;一&#xff09;内存1.内存2.内存-JMX3.内存-Jmap4.内存-结合代码确认问题 &#xff08;二&#xff09;CPU1.CPU-JMX或…...

监控系列(六)prometheus监控DMHS操作步骤

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

SLAM从入门到精通(dwa速度规划算法)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 要说搜路算法&#xff0c;这个大家都比较好理解。毕竟从一个地点走到另外一个地点&#xff0c;这个都是直觉上可以感受到的事情。但是这条道路上机…...

嵌入式实时操作系统的设计与开发(aCoral线程学习)

真正的RTOS&#xff0c;基本上没有做到进程&#xff0c;只是停留在多线程&#xff0c;因为多进程要解决很多问题&#xff0c;且需要硬件支持&#xff0c;这样就使得系统复杂了&#xff0c;从而就可能影响系统实时性。 线程之间是共享地址的&#xff0c;也就是说当前线程的地址…...

JAVA基础(JAVA SE)学习笔记(二)变量与运算符

前言 1. 学习视频&#xff1a; 尚硅谷Java零基础全套视频教程(宋红康2023版&#xff0c;java入门自学必备)_哔哩哔哩_bilibili 2023最新Java学习路线 - 哔哩哔哩 正文 第一阶段&#xff1a;Java基本语法 1. Java 语言概述 JAVA基础&#xff08;JAVA SE&#xff09;学习…...

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代码解读-相机参数与坐标系变换 - 知乎 原文题目&#xff1a;NeRF: Representing Scenes as Neural Radiance Field…...

Java 中实现单例模式

单例模式 单例模式&#xff0c;就是一个类在任何情况下绝对只有一个实例&#xff0c;并且提供一个全局访问点来获取该实例。 要实现单例&#xff0c;至少需要满足两个点&#xff1a; 私有化构造方法&#xff0c;防止被外部实例化造成多实例问题 提供一个静态方位作为全局访问点…...

标签页的使用

目录 1、引用TabSheet.h和TabSheet.cpp文件&#xff1a; 2、主窗口添加标签页&#xff1a; &#xff08;1&#xff09;、标签页的创建和属性更改 &#xff08;2&#xff09;、添加俩个标签页的类 &#xff08;3&#xff09;、主窗口添加成员变量 &#xff08;4&#xff09…...

新一代开源语音库CoQui TTS冲到了GitHub 20.5k Star

Coqui TTS 项目介绍 Coqui 文本转语音&#xff08;Text-to-Speech&#xff0c;TTS&#xff09;是新一代基于深度学习的低资源零样本文本转语音模型&#xff0c;具有合成多种语言语音的能力。该模型能够利用共同学习技术&#xff0c;从各语言的训练资料集转换知识&#xff0c;来…...

CSS 效果:多列文字,第一行对齐,flex方式元素被挤压

如图效果&#xff1a;2列&#xff0c;第一列只有一行&#xff0c;第二列多行。要求第一行对齐 实现&#xff1a;使用flex 如果不配置flex-shrink的话&#xff0c;第一列会被挤压 给第一列&#xff1a;备注配置压缩属性&#xff1a; flex-shrink&#xff1a;0。 <!DOCTYPE…...

优维低代码实践:片段

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 优维…...

【计算机网络】第一章、计算机网络体系结构

1.1计算机网络的组成与分类 1.计算机网络的组成 从不同的角度来看内容从组成上看硬件、软件、协议从工作方式上岸边缘部分、核心部分从功能上看通信子网、资源子网 2.计算机网络的分类 角度内容分布范围广域网、城域网、局域网、个域网传输技术广播式网络、点对点网络拓扑结…...

vr火灾逃生安全科普软件开展消防突击教育安全有效

VR火灾逃生自救虚拟体验是一种利用虚拟现实技术来模拟火灾逃生自救场景的教育工具。以下是这个体验的几个优点&#xff1a;VR消防安全体验馆的出现&#xff0c;为城市的安全教育开辟了新的途径。这种创新的体验方式&#xff0c;能够让市民在模拟的火灾场景中学习并掌握消防安全…...

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 中根据不同的业务表示&#xff0c;分类打印到不同的文件夹、时区动态设置 logback-spring.xml 完整配置 <?xml version"1.0" encoding"UTF-8"?> <configuration debug"false" scan"true" scanPeriod&…...

linux系统编程之一

1&#xff09;fcntl的使用方法 fcntl作用:可以用fcntl函数改变一个已打开的文件属性而不必重新打开文件&#xff1b; 堆排序是完全二叉树&#xff0c;但不是排序二叉树&#xff1b; 排序二叉树要求兄弟节点之间有大小关系&#xff0c;比如说左小右大&#xff1b; 堆排序仅要求…...

【LeetCode】《LeetCode 101》第十三章:链表

文章目录 13.1 数据结构介绍13.2 链表的基本操作206. 反转链表&#xff08;简单&#xff09;21. 合并两个有序链表&#xff08;简单&#xff09;24.两两交换链表中的节点&#xff08;中等&#xff09; 13.3 其它链表技巧160. 相交链表&#xff08;简单&#xff09;234. 回文链表…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...