简介

     本系列flink源码分析的第二个系列,上一个flink源码分析之集群与资源》分析集群与资源,本系列分析功能组件,kubeclientrpc心跳,高可用slotpoolrestmetricsfuture

     本文解释slot管理组件,严格来说,slot管理组件不属于功能组件,而是业务组件,包括slotpoolslotmanage资源消费申请到资源后,在本地管有资源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,前者是分配信息,后者是资源信息

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

5. 选出最合适的资源后,PhysicalSlotProvider调用DeclarativeSlotPoolBridge的allocateAvailableSlot分配资源,该方法不是实际分配资源,而是调用DeclarativeSlotPool的
increaseResourceRequirementsBy增加资源请求(声明),该方法触发异步处理资源请求,3.1 notifyNewResourceRequirements深入分析

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

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

最后分析一下
notifyNewResourceRequirements

3.1 notifyNewResourceRequirements

notifyNewResourceRequirements类型Consumer函数方法

图1

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

图2

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

设置方法是哪里调起?

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

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

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

4. rpc连接后,触发onRegistrationSuccess事件方法然后
DeclarativeSlotPoolService的connectToResourceManager方法,而后者即图1,设置Conumer

     总结请求新资源主要是调用资源管理器declareRequiredResources方法,该方法
ResourceManagerLeaderListener和DeclareResourceRequirementServiceConnectionManager绕一下,是为了适应分布式环境资源管理器上线下线,主节点选举后获取新主的地址,重新连接后设置ResourceManagerGateway。

请求新资源(request new slots)

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

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

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

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

2. DeclarativeSlotPoolBridge调用
increaseResourceRequirementsBy增加资源请求,触发检查资源请求

原文地址:https://blog.csdn.net/szlhj/article/details/134689639

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_48602.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注