flink源码分析之功能组件(四)-slot管理组件I

简介

本系列是flink源码分析的第二个系列,上一个《flink源码分析之集群与资源》分析集群与资源,本系列分析功能组件,kubeclient,rpc,心跳,高可用,slotpool,rest,metrics,future。

本文解释slot管理组件,严格来说,slot管理组件不属于功能组件,而是业务组件,包括slotpool和slotmanage,++资源消费者++ 申请到资源后,在本地管有资源slot,避免**++资源管理器++** 异常导致作业运行失败,同时**++资源管理器++**不可用也不会影响作业的继续执行,只有资源不足时才会导致作业执行失败。

slot管理组件也是实现声明式资源管理核心,值得我们细细分析。本文分析slotpool组件的分配/申请资源,slotpool组件II 分析声明式资源管理

slotpool组件

上图是++slotpool++ **++组件++**的类图

++slotpool++ **++组件++**负责对接资源管理器,分配和申请资源

  • allocatePhysicalSlot 分配资源,申请可用资源后对资源分配

  • requestNewAllocatedSlot 请求待定资源/新资源

++slotpool++ **++组件++**也是flink声明式资源管理的核心

下面详细介绍**++slotpool++** ++组件++ ++的++资源分配,申请资源和声明式管理资源

分配可用资源(simple allocator)

用户提交作业,++分发器++ 接收并分发作业到**++作业管理器++** ,**++调度器++**确定所需资源,申请资源,检查当前可用资源是否足够,如果不足,请求新资源,动态增加资源;若足够,分配资源给任务。

分配还有另一个实现,slot sharing,有比较复杂的资源分配策略,分配策略跟本文主题无关,因此选了比较简单simple allocator

DeclarativeSlotPoolBridge桥接 ++声明式资源池++DeclarativeSlotPool,用声明式SlotPool实现SlotPool,为了简化描述,下面描述不区分DeclarativeSlotPoolBridge和DeclarativeSlotPool

  1. **++调度器++**调用PhysicalSlotProvider的allocatePhysicalSlot分配资源

  2. allocatePhysicalSlot首先tryAllocateFromAvailable,从当前可用资源分配;若当前可用资源不够**++请求新资源++**

  3. tryAllocateFromAvailable调用DeclarativeSlotPoolBridge的

getAvailableSlotsInformation获取资源池的可用资源,其实际最终调用AllocatedSlotPool的getFreeSlotsInformation并组装为SlotInfoAndResources,该类组合了SlotInfo和ResourceProfile,前者是分配信息,后者是资源信息

  1. SlotSelectionStrategy选择策略在可用资源选择一个最合适的,目前基于位置策略

  2. 选出最合适的资源后,PhysicalSlotProvider调用DeclarativeSlotPoolBridge的allocateAvailableSlot分配资源,该方法不是实际分配资源,而是调用DeclarativeSlotPool的

increaseResourceRequirementsBy增加资源请求(声明),该方法触发异步处理资源请求,3.1 notifyNewResourceRequirements深入分析

  1. 最后保留资源,真正的分配在处理资源请求,保留资源AllocatedSlotPool的reserveFreeSlot登记已分配资源AllocatedSlot

  2. 最后调整资源,保留不一定是最终分配,最终分配后调整实际资源情况

最后分析一下

notifyNewResourceRequirements

3.1 notifyNewResourceRequirements

notifyNewResourceRequirements类型Consumer,函数方法

图1

上图是notifyNewResourceRequirements设置和调用的方法,函数是怎么设置?

图2

图1是图2的 connect调用,设置模板S,即service属性

设置方法是哪里调起?

1.ResourceManagerLeaderListener监听**++资源管理器++**选主,获取新主节点的地址

2.ResourceManagerLeaderListener通知JobMaster,调用JobMaster的notifyOfNewResourceManagerLeader方法

3.notifyOfNewResourceManagerLeader启动rpc(重新)连接

  1. rpc连接后,触发onRegistrationSuccess事件方法,然后

DeclarativeSlotPoolService的connectToResourceManager方法,而后者即图1,设置Conumer

总结,++请求新资源++ 主要是调用**++资源管理器++** 的declareRequiredResources方法,该方法用

ResourceManagerLeaderListener和DeclareResourceRequirementServiceConnectionManager绕一下,是为了适应分布式环境下**++资源管理器++**上线下线,主节点选举后获取新主的地址,重新连接后设置ResourceManagerGateway。

请求新资源(request new slots)

请求新资源是分配资源的延申,当前没有足够的可用资源,调度器请求新的资源

类图跟申请和分配资源基本相同,场景实现由相同的类实现

**1. ++调度器++**在分配资源没有获得足够可用资源,

调用SlotPool的requestNewAllocatedSlot,请求新的资源;这里的SlotPool是DeclarativeSlotPoolBridge桥接 DeclarativeSlotPool实现的SlotPool,实现声明式管理的资源池,下面不区分两者

2. DeclarativeSlotPoolBridge调用

increaseResourceRequirementsBy增加资源请求,触发检查资源请求

相关推荐
2601_963282774 分钟前
政企无线对讲系统落地:从设备采购到长期运维的完整工程实践
大数据·运维·数据库
2601_9622184724 分钟前
万象生鲜系统协议价底层架构实现生鲜企业报价业务数字化管理
大数据·运维·微服务·云原生·架构
南京兴帝文化传媒有限公司1 小时前
地图SEO与AI搜索优化结合实践:宁国摄影工作室本地获客案例分析
大数据·前端·人工智能·geo 优化·geo优化避坑
长谷深风1111 小时前
AI自动化中的关键闸门:何时必须人工审批?
大数据·人工智能·ai·自动化·ai agent·智能体·hitl
天辛大师2 小时前
天辛大师谈AI时代的沉思录,All in AI 持续做事与放大效应
大数据·人工智能·随机森林·重构·启发式算法
智码看视界2 小时前
大数据架构深度解析:StarRocks 实时数仓搭建:比 ClickHouse 更适合多维分析的场景
大数据·starrocks·olap·数据建模·列式存储·clickhouse对比
韦韦(Carina)2 小时前
技术博客结构化:让 AI 准确引用你的 7 条排版铁律
大数据·人工智能
IT毕设实战小研2 小时前
基于大数据处理的京东商品销售态势分析与可视化设计
大数据·科技·机器学习·信息可视化·数据分析
一比七品牌咨询2 小时前
科技企业品牌定位:如何把技术优势转化为品牌优势?
大数据·人工智能·品牌策划·品牌全案策划·深圳品牌策划公司·品牌定位
QQ_21696290962 小时前
基于微服务架构的店铺管理系统的设计与实现
大数据·spring boot·后端·spring·微服务·小程序·架构