Flink架构分析之资源分配
Task Slot
Flink中每个真正执行任务的TaskManager都是一个JVM进程,其在多线程环境中执行一个或者多个子任务。为了控制一个JVM同时能运行的任务数量,flink引入了task slot的概念。每一个task solt代表了TaskManager资源的一个子集,比如,一个拥有3个solt的TaskManager,每一个solt可以使用1/3TM所管理的内存。进行资源分割意味着为子任务保留足够的内存,从而避免与其他子任务进行竞争。注意:当前solt还不能分割cpu资源,仅仅对内存进行了分割。
通过调整TMsolt的数量,用户可以确定子任务的隔离程度,比如,每个TM只设置一个solt,那么就意味着没一个任务组都在单独的JVM中执行。共用JVM的任务可以共享TCP链接,心跳消息,甚至可能共享数据集。
默认情况下,flink允许子任务共享slot只要这些子任务属于同一job。允许solt共享主要有以下两方面的好处:
- flink计算一个job所需
solt数量时,只需要确定所其最大并行度(parallelism),而不用计算每一个任务的并行度的总和。 - 能更好的利用资源,如果没有
solt共享,那些资源需求不大的map子任务将和资源需求更大的window占用相同的资源。
当然Flink也提供了资源分组机制相关API,允许用户避免非预期的资源共享。
startNewChain从此operator开始新的资源共享链disableChaining禁止把此operator加入到资源共享链中slotSharingGroup把此operator加入到指定的资源共享组中
资源分配逻辑
下图是fip6对架构改进过后JobManager与TaskManager主要交互图,可见job在执行中通过SlotProvider(即Scheduler)向ResourceManager申请资源,RM协调TaskManager满足JobManager资源请求。

下图是资源申请详细调用流程图:

可见Execution在执行过程中,会根据是否设置资源共享组,考虑是否为多个Execution分配同一个Slot,其代码逻辑在SlotSharingManager中。资源分配的时候优先考虑SlotPool中是否有已分配资源能满足需求,如果不能再向ResourceManager申请。
Scheduler
- 通过
allocateSlot向SlotPool申请资源 - 通过
returnLogicSlot释放资源到SlotPool

SlotPool

与其他组件之间的交互:
- Scheduler -> SlotPool: 调度器向SlotPool申请资源
- SlotPool -> ResourceManager: SlotPool如果无法满足资源请求,向RM发起申请
- JobMaster -> SlotPool: 从TaskManager获取的资源通过JobMaster分配给SlotPool

LogicalSlot

SingleLogicSlot包含一个SlotContext接口对象,PhysicalSlot接口继承了SlotContext实现了
PhysicalSlot.Payload接口,可以通过PhysicalSlot.tryAssignPayload把PhysicalSlot分配给LogicalSlotPhysicalSlot

AllocatedSlot代表从TaskExecutor分配的资源一个资源槽,代表TaskExecutor上的一段资源。
如下代码把PhysicalSlot分配给LogicalSlot:

Slot资源共享
Flink实现了资源共享机制,相同资源组里的多个Execution可以共享一个Slot资源槽。具体共享机制又分两种:
CoLocationGroup: 保证把JobVertices的第n个运行实例和其他相同组内的JobVertices第n个实例运作在相同的slot中。SlotSharingGroup: 允许不同的JobVertices的部署在相同的Slot中,但这是一种宽约束,只是尽量做到不能完全保证。
SlotSharingManager
每一个sharingGroup组用一个SlotSharingManager对象管理资源共享与分配。普通的slotsharing根据组内的JobVertices id 查找是否已有可以共享的Slot,如果有则直接使用,否则申请新的Slot。colocal类型根据组内每个ExecutionVertex关联的CoLocationConstraint查找是否有相同CoLocationConstraint约束已分配Slot可用(注:满足CoLocationConstraint约束的同一个资源共享组内的各节点相同序号n的并行实例,共享相同的CoLocationConstraint对象)

其他相关类
- CoLocationConstraint
- SingleLogicalSlot
- MultiTaskSlot


Flink架构分析之资源分配的更多相关文章
- Flink架构分析之Standalone模式启动流程
概述 FLIP6 对Flink架构进行了改进,引入了Dispatcher组件集成了所有任务共享的一些组件:SubmittedJobGraphStore,LibraryCacheManager等,为了保 ...
- Flink架构分析之HA
抽象 LeaderElectionService 这个接口用于从一组竞选者中选出一个leader,其start方法需要传递一个LeaderContender竞选者作为参数,如果有多个竞选者,则每一个竞 ...
- Flink架构分析之RPC详解
主要抽象 Flink RPC 框架主要抽象了RpcService,RpcEndpoint,RpcGateway,RpcServer这几个接口,具体实现可以采用多种方式,比如:akka,netty Rp ...
- flink架构介绍
前言 flink作为基于流的大数据计算引擎,可以说在大数据领域的红人,下面对flink-1.7的架构进行逻辑上的分析并和spark做了一些关键点的对比. 架构 如图1,flink架构分为3个部分,cl ...
- Flink架构,源码及debug
序 工作中用Flink做批量和流式处理有段时间了,感觉只看Flink文档是对Flink ProgramRuntime的细节描述不是很多, 程序员还是看代码最简单和有效.所以想写点东西,记录一下,如果能 ...
- tomcat架构分析 (Session管理)
Session管理是JavaEE容器比较重要的一部分,在app中也经常会用到.在开发app时,我们只是获取一个session,然后向session中存取数据,然后再销毁session.那么如何产生se ...
- Magento架构分析,Magento MVC 设计分析
Magento架构分析,Magento MVC 设计分析 分类:Magento 标签:Magento MVC.Magento架构 669人浏览 Magento 采用类似 JAVA的架构,其扩展与稳定性 ...
- Flickr 网站架构分析
Flickr 网站架构分析 Flickr.com 是网上最受欢迎的照片共享网站之一,还记得那位给Windows Vista拍摄壁纸的Hamad Darwish吗?他就是将照片上传到Flickr,后而被 ...
- Android架构分析之Android消息处理机制(二)
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本号:4.4.2 在上一篇文章中我们看了一个使用Handler处理Message消息的样例,本文我们 ...
随机推荐
- NSProxy应用例子
动态代理模式的应用很多,特别是在不能修改被代理类的前提下,要对执行某些方法时需要打log或者捕捉异常等处理时,是一个非常方便的方法.只需要少量修改客户端(场景类)代码和添加一个代理类就可以实现,这个符 ...
- [Violet]天使玩偶/SJY摆棋子
题目 \(KD-tree\)做最近点对的复杂度好像是假的吧,怎么看也看不出来是\(O(\sqrt{n})\)啊 首先\(KD-tree\)长得和平衡树还是很像的,每个节点都存储了一个\(k\)维空间上 ...
- [BJWC2008]雷涛的小猫
嘟嘟嘟 dp. 刚开始我想的是dp[i][j]表示在第 i 棵树上,高度为h能吃到的最多的果子,如此能得到转移方程: dp[i][j] = max(dp[i][j + 1], dp[k][j + de ...
- 红米5/红米5 Plus逼出最强魅蓝Note6?降价后已成性价比神机
从品牌到产品命名,小米旗下的红米与魅族旗下的魅蓝似乎是一对天生的对手,如今小米即将发布千元全面屏的红米5/红米5 Plus,暂时没有全面屏手机推出的魅蓝也拿出了自己的应对策略,魅蓝的办法简单粗暴:直接 ...
- java集合(类似python的列表)
一:学习方法 我们在学习一个类的时候,如果他是期其他类的实现类,我们在学习的时候,先学习他的共同的继承类,学习他们共有的方法,在学习他实现类的特殊方法.由共性--->特殊. 二:集合 1.集合和 ...
- Use UMDH to identify memory leak problem
We sometimes got memory leak problem, and we need to find the leaked memory, Here is a usful tool fr ...
- #leetcode刷题之路39-组合总和
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合.candidates 中的数字可以无限制重复被选取 ...
- Linux开机自启动脚本
将需要开机自启动的脚本命令写在文件/etc/rc.d/rc.local中即可. 比如需要开机自启动MySql和Apache,则在/etc/rc.d/rc.local文件尾部加入两行命令: system ...
- Modelsim SE自动化仿真——如何将.do文件中自定义的库链接到testbench顶层模块
我们用Modelsim SE进行仿真时,为了方便,一般会编写.do文件来启动当前仿真.关于.do文件的编写,一般网上都有成型的模板,我们只要稍微改几个参数,就可以符合我们的仿真需求了.但是如果仿真时需 ...
- flex拖动图片
<?xml version="1.0" encoding="utf-8"?><s:Application xmlns:fx="htt ...