Flink之运行架构

1、在此之前,我先说一下flink主要组件:

JobManager,作业管理器,它的作用主要有3点:

1、控制一个应用程序的执行,因为一个应用程序进来,都有对应的JobManager,应用程序提交后,JobManager会把应用程序中的JobGraph转为执行图ExecutionGraph、
2、会向ResourceManager请求slot插槽来执行任务
3、获取资源后会把执行图发给TaskManager进行运行,并在其中进行协调工作
ResourceManager,资源管理器,它的作用主要有2点:
1、主要负责管理插槽slot,当JobManager向ResourceManager请求插槽来执行任务时,将对应插槽的TaskManager分配给JobManager,如果ResourceManager管理的插槽资源不足,则会向平台发起会话,让平台提供TaskManager
2、终止闲置的TaskManager,释放计算资源
TaskManager,任务管理器,它的作用主要有2点:
1、打工仔一个,一个TaskManager有多个插槽,每个插槽都是独立线程,TaskManager主要是向ResourceManager注册它的插槽,然后根据ResourceManager的指令提供自己的solt给JobManager调用执行任务
2、与其他TaskManager交换数据
Dispatcher,分发器,它的作用主要有2点:
1、为应用的提交提供REST接口
2、启动WebUI来展示和监控执行过程信息

2、Flink Yarn-per-job模式提交流程:

flink任务提交后,yarn客户端开始执行代码、生成逻辑数据流图、作业图以及其他一些配置信息,并根据YarnResourceManager返回的资源路径上传Flink的Jar包和配置,之后向YarnResourceManager提交任务,YarnResourceManager分配Container资源并通知对应的NodeManager启动AppMaster,AppMaster启动后加载Flink的Jar包和配置构建环境,然后分别启动flink组件JobManager、Dispacher、ResourceManager,在这过程中,flink组件JobManager将作业图转为执行图ExecutionGraph,并通过AppMaster向YarnResourceManager申请资源,请求slot插槽来执行任务,YarnResourceManager收到请求后分配新Container资源,并让由AppMaster通知资源所在节点的NodeManager启动flink组件TaskManager,然后TaskManager向flink组件ResourceManager所在的节点注册solt,flink组件ResourceManager所在的节点发出提供solt的指令给TaskManager,TaskManager则把自己的solt提供给JobManager,最后JobManager提交任务给对应TaskManager的slot执行。

3、作业调度原理

slot和并行度、任务调度关系

我先说一下什么是solt?  什么是并行度?

slot:是在TaskManager里面负责处理资源的单元,一个TaskManager至少有一个以上的slot

并行度:一个算子设置多少个子任务的个数就称为并行度

TaskManager是一个jvm进程,slot是一个独立的线程,任务分配给TaskManager后在插槽slot中执行,有多少任务由并行度决定,能完成多少任务,由slot决定,两个概念

slot的多少,决定当前TaskManager最大执行的线程数量,表示并行执行所能提供的最大能力,可以在flink配置文件中进行配置,是静态概念

并行度在算子中设置为多少,则决定真正执行的时候那个并行任务多少,表示并行执行所需要的实际能力,是动态,可以调节的

所以一个流中并行度的大小,直接决定需要多少个插槽slot,那么一个流中有几个并行度,怎么看?

如果一个流中,没有在全局设置断链、也没有为算子中设置共享组、也没有为算子设置断链、也没有为算子设置开启新链,则可以看成完整一条流,则此时需要使用TaskManager几个数量slot,取决于这条流的每个算子所设置并行度中最大的那个算子的并行度,比如map算子设置并行度2,keyby设置为3且是所有算子中设置最大的并行度,则此时这条流需要使用TaskManager三个slot。

如果一个流中,算子中设置共享组,则此时需要使用TaskManager中slot的数量为每个算子设置的并行度的总和。

补充:并行度的优先级

1、如果设置了每个算子的并行度,则并行度以算子设置的并行度为准

2、如果没有设置算子的并行度,则默认使用代码中全局(env)设置的并行度

3、如果全局(env)没有设置并行度,则使用提交Job时配置的并行度

4、最后才使用flink配置文件中的默认并行度

4、程序结构和数据流

1、所有的Flink程序都由三部分组成: Source 、Transformation 和 Sink。
2、Source 负责读取数据源,Transformation 利用算子进行加工处理数据,Sink 负
责输出数据

5、执行图

StreamGraph:代码生成最初的图,一种程序的拓扑结构
JobGraph:StreamGraph的优化版,它主要是将多个符合条件的节点合成一个节点
ExecutionGraph:JobGraph并行版
物理执行图:它主要是调度后,在各个TaskManager 上部署 Task 后形成的“图”

6、数据传输和任务链

数据传输形式:

1、One-to-one:分区不变和元素的顺序不变。

2、Redistributing:分区改变。

任务链:并行度相同、并且是 one-to-one 操作

任务链的设置:

1、算子设置断链:disablechaining()

2、算子开启新链:startNewchaining()

3、全局断链:env.disablechaining()

4、通过为算子添加共享组设置断链 slotSharingGroup("组名")

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值