运维.售后
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
博客
Blog
ToB门户
了解全球最新的ToB事件
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
大数据
›
数据仓库与分析
›
【Flink】集群架构
【Flink】集群架构
小秦哥
金牌会员
|
2024-9-24 23:56:01
|
显示全部楼层
|
阅读模式
楼主
主题
876
|
帖子
876
|
积分
2628
Flink运行时架构
Flink按照整体分别有TaskManager、JobManager两个历程(Flink客户端用来将JobGraph提交到JobManager因此客户端不属于运行时架构中的历程)。
Actor System代表是Flink RPC底层通信(内部是通过Pekko、动态代理、异步编程实现)。
NetworkManager网络管理,在TaskManager运行Task的时间内部基于Netty封装了一套任务流转的代码(包罗网络管理)。
Memory、IO Manager是Flink内存模子相干的封装。
Task Slot就是TaskManager执行时间的任务槽。
Task就是任务执行时间的线程任务。
Data Streams数据任务中心进行shuffle任务交换就用到了网络管理。
JobManager、TaskManager内部都有一个Actor System,两个历程之间任务状态、心跳、Checkpoint都是基于Flink RPC进行通信、而RPC底层内部封装了ActorySystem。
Flink任务提交流程
以Yarn运举动主说明执行流程
用户通过客户端下令启动Session Cluster,会触发集群所有服务的启动。
ClusterManager会为运行时各个组件申请运行节点以及资源(比如Yarn的Container)。
客户端(CliFronted)提交应用程序代码(代码最终转换成JobGraph结果),然后通过ClusterClient提交JobGraph到集群中运行。
集群中的Dispatcher服务接收到JobGraph对象,根据JobGraph对象启动JobMaster。
JobMaster构建的时间会将JobGraph转换成ExecutionGraph对象。
JobMaster会向ResourceManager服务申请计算资源。
ResourceManager接收到申请后,先判断是否有充足的slot资源,假如有则直接分配给JobMaster,假如没有则向资源管理器申请(比如Yarn Container)。
申请到资源以后就会启动TaskManager,TaskManager启动后会主动向ResourceManager汇报slot资源。
ResourceManager收到注册资源后,会立刻向TaskManager发送SlotRequest请求为任务分配资源。
TaskManager接收到ResourceManager的资源分配请求后,会对符合条件的SlotRequest进行处置处罚,然后向JobMaster发送申请(offerslots)提供Slot资源。
JobMaster接收到offerslots的消息后,就会向slot所在的TaskManager申请提交Task任务。
TaskManager接收到JobMaster发送的启动Task任务申请后,会启动Task线程。
TaskManager中的Task线程周期性的向JobMaster汇报任务运行状态,直到任务竣事。
Flink Clients客户端(CliFrontent)
Flink客户端负责将任务提交到集群,与JobManager构建RPC连接,然后将任务提交到JobManager,通过和JobManager之间进行交互获取任务执行状态。Flink客户端Clients不是Flink程序运行时的一部门,作用是向JobManager预备和发送JobGraph,之后,客户端可以断开(detached mode)连接或者保持连接(attached mode)。
客户端提交任务有以下几种方案
可以采用CLI方式或者通过使用Flink WebUI提交。
在应用程序中指定JobManager的RPC网络端口构建ExecutionEnvironment提交Flink应用。
JobManager
JobManager负责整个Flink集群任务的调度以及资源的管理,从客户端中获取提交的应用,然后根据集群中TaskManager上TaskSlot的使用情况,为提交的应用分配相应的TaskSlots资源并下令TaskManger启动从客户端中获取的应用。
JobManager相称于整个集群的Master节点,Flink HA 集群中可以有多个JobManager,但整个集群中有且仅有一个活跃的JobManager,其他的都是StandBy。JobManager和TaskManager之间通过Actor System进行通信,获取任务执行的情况并通过Actor System将应用的任务执行情况发送给客户端。同时在任务执行过程中,Flink JobManager会触发Checkpoints操作,每个TaskManager节点收到Checkpoint触发指令后,完成Checkpoint操作,所有的Checkpoint协调过程都是在Flink JobManager中完成。当任务完成后,Flink会将任务执行的信息反馈给客户端,而且释放掉TaskManager中的资源以供下一次提交任务使用。
负责整个Flink集群任务的调度以及资源的管理
为应用分配TaskSlots资源
向TaskManager发送消息启动Task任务
触发Checkpoints操作
JobManager 三个差别的组件
ResourceManager
这里说的ResourceManager不是Yarn资源管理中的ResourceManager,而是Flink中的ResourceManager,其主要负责Flink集群资源分配、管理和回收。在Flink中这里说的资源主要是TaskManager节点上的Task Slot计算资源,Flink中每个提交的任务最终会转换成task,每个task必要发送到TaskManager 上的slot中执行(slot是资源调度最小的单位),Flink为差别的环境和资源提供者(比方:Yarn/Kubernetes和Standalone)实现了对应的ResourceManager,这些ResourceManager负责申请启动TaskManager获取Slot资源。
在Standalone集群中,集群启动会同时启动TaskManager,不支持提交任务时启动TaskManager(没有Per-Job任务提交模式),ResourceManager只能分配可用TaskManager的slots,而不支持自行启动新的TaskManager,而基于其他资源调度框架执行任务时,当ResourceManager管理对应的TaskManager没有充足的slot,会申请启动新的TaskManager历程。
负责Flink集群资源分配、管理、回收
接收TaskManager节点注册Task Slot计算资源
差别的集群模式对应差别的ResourceManager实现
定时监听JobMaster、TaskManager的心跳
Dispatcher
Dispatcher提供了一个REST接口,用来提交Flink应用程序执行,比方CLI客户端或Flink Web UI提交的任务最终都会发送至Dispatcher组件,由Dispatcher组件对JobGraph进行分发和执行,并为每个提交的作业启动一个新的 JobMaster,它还运行 Flink WebUI 用来提供作业执行信息。
提供Rest接口,如提交应用程序的接口(JobGraph)
收到JobGraph进行分发、执行并启动JobMaster
提供作业执行信息
JobMaster
JobMaster负责管理整个任务的生命周期,负责将Dispatcher提交上来的JobGraph转换成ExecutionGraph(执行图)结构,通过内部调度程序对ExecutionGraph执行图进行调度和执行,最终向TaskManager中提交和运行Task实例,同时监控各个Task的运行状态,直到整个作业中所有的Task都执行完毕。
JobManager和ResourceManager组件一样,JobManager组件自己也是RPC服务,具备通信能力,可以与ResourceManager进行RPC通信申请任务的计算资源,资源申请到位后,就会将对应Task任务发送到TaskManager上执行,当Flink Task任务执行完毕后,JobMaster服务会关闭,同时释放任务占用的计算资源。所以JobMaster与对应的Flink job是一一对应的。
负责整个任务的声明周期。
将JobGrach任务转换成ExecutionGraph
通过Scheduler调度ExecutionGraph进行调度和执行
向TaskManager中提交Task实例。
监控Task运行状态
定时向ResourceManager发送心跳
TaskManager
TaskManager负责向整个集群提供Slot计算资源,同时管理了JobMaster提交的Task任务。TaskManager会提供JobManager从ResourceManager中申请和分配的Slot计算资源,JobMaster最终会根据分配到的Slot计算资源将Task提交到TaskManager上运行。另外,TaskManager还可缓存数据,TaskManager之间可以进行DataStream数据的交换。
一个Flink集群中至少有一个TaskManager,在TaskManager中资源调度的最小单位是 task slot ,一个TaskManger中的task Slot个数决定了当前TaskManger最高支持的并发task个数,一个task Slot中可以执行多个算子。
负责向ResourceManager注册slot计算资源
管理JobMaster分配的Task任务
缓存数据、中心计算结果数据交换
定时向ResourceManager发送心跳
task slot
在 TaskManager 中资源调度的最小单位是 task slot。
每个任务槽 表示了TaskManager拥有计算资源的一个固定大小的子集。这些资源就是用来独立执行一个子任务的。
Task Slot和物理资源
slot目前仅仅用来隔离内存(平分内存),不会涉及CPU的隔离。在详细应用时,可以将slot数量设置为机器的CPU核心数,尽量避免差别任务之间对CPU的竞争。这也是开发环境默认并行度设为机器CPU数量的原因。
Tasks 和并行度
task slot和并行度都跟程序的并行执行有关,但两者是完全差别的概念。
task slot是静态的概念,是指TaskManager具有的并发执行能力,可以通过参数taskmanager.numberOfTaskSlots进行设置;
并行度是动态概念,指的是TaskManager运行程序时实际使用的并发能力,可以通过参数parallelism.default进行设置。
举例说明:假设一共有3个TaskManager,每一个TaskManager中的slot数量设置为3个,那么一共有9个task slot,表示集群最多能并行执行9个算子。
Tasks 和算子链
对于分布式执行,Flink 将算子的 subtasks 链接成 tasks。每个 task 由一个线程执行。将算子链接成 task 是个有效的优化:它淘汰线程间切换、缓冲的开销,而且淘汰延迟的同时增长整体吞吐量
如下图当满足条件的时间就会未来Source、Map 归并成为一个Operator chain。如许就淘汰了线程间切换(用户态内核态)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
小秦哥
金牌会员
这个人很懒什么都没写!
楼主热帖
Python教程(5)——Python的第一个程序 ...
Kubernetes(k8s)安装以及搭建k8s-Das ...
java递归简介说明
〖Python接口自动化测试实战篇⑤〗- 接 ...
网易云信实时视频直播在TCP数据传输层 ...
海量监控数据处理如何做,看华为云SRE ...
从 Stream 到 Kotlin 再到 SPL
liunx速记
【问题】为什么 System.Timers.Timer ...
开发一个二方包,优雅地为系统接入ELK ...
标签云
存储
服务器
快速回复
返回顶部
返回列表