失效链接处理 |
零基础入门:从0 到1学会Apache Flink PDF 下载
本站整理下载:
提取码:6p8n
相关截图:
主要内容:
Apache Flink 进阶(一):Runtime 核心机制剖析
作者:高赟(云骞)
阿里巴巴技术专家
简介:Flink 的整体架构如图 1 所示。Flink 是可以运行在多种不同的环境中的,
例如,它可以通过单进程多线程的方式直接运行,从而提供调试的能力。它也可以运
行在 Yarn 或者 K8S 这种资源管理系统上面,也可以在各种云环境中执行。
1. 综述
本文主要介绍 Flink Runtime 的作业执行的核心机制。首先介绍 Flink Runtime
的整体架构以及 Job 的基本执行流程,然后介绍在这个过程,Flink 是怎么进行资源
管理、作业调度以及错误恢复的。最后,本文还将简要介绍 Flink Runtime 层当前正
在进行的一些工作。
2. Flink Runtime 整体架构
Flink 的整体架构如图 1 所示。Flink 是可以运行在多种不同的环境中的,例如,
它可以通过单进程多线程的方式直接运行,从而提供调试的能力。它也可以运行在
Yarn 或者 K8S 这种资源管理系统上面,也可以在各种云环境中执行。
Apache Flink 进阶(一):Runtime 核心机制剖析 < 5
图 1 Flink 的整体架构,其中 Runtime 层对不同的执行环境提供了一套统一的分布式执行引擎
针对不同的执行环境,Flink 提供了一套统一的分布式作业执行引擎,也就是
Flink Runtime 这层。Flink 在 Runtime 层之上提供了 DataStream 和 DataSet 两
套 API,分别用来编写流作业与批作业,以及一组更高级的 API 来简化特定作业的
编写。本文主要介绍 Flink Runtime 层的整体架构。
Flink Runtime 层的主要架构如图 2 所示,它展示了一个 Flink 集群的基本结
构。Flink Runtime 层的整个架构主要是在 FLIP-6 中实现的,整体来说,它采用了
标准 master-slave 的结构,其中左侧白色圈中的部分即是 master,它负责管理整
个集群中的资源和作业;而右侧的两个 TaskExecutor 则是 Slave,负责提供具体的
资源并实际执行作业。
6 > Apache Flink 进阶(一):Runtime 核心机制剖析
图 2 Flink 集群的基本结构。Flink Runtime 层采用了标准的 master-slave 架构
其中,Master 部分又包含了三个组件,即 Dispatcher、ResourceManager
和 JobManager。其中,Dispatcher 负责接收用户提供的作业,并且负责为这个
新提交的作业拉起一个新的 JobManager 组件。ResourceManager 负责资源的
管理,在整个 Flink 集群中只有一个 ResourceManager。JobManager 负责管理
作业的执行,在一个 Flink 集群中可能有多个作业同时执行,每个作业都有自己的
JobManager 组件。这三个组件都包含在 AppMaster 进程中。
基于上述结构,当用户提交作业的时候,提交脚本会首先启动一个 Client 进程
负责作业的编译与提交。它首先将用户编写的代码编译为一个 JobGraph,在这个过
程,它还会进行一些检查或优化等工作,例如判断哪些 Operator 可以 Chain 到同一
个 Task 中。然后,Client 将产生的 JobGraph 提交到集群中执行。此时有两种情
况,一种是类似于 Standalone 这种 Session 模式,AM 会预先启动,此时 Client
直接与 Dispatcher 建立连接并提交作业即可。另一种是 Per-Job 模式,AM 不会
预先启动,此时 Client 将首先向资源管理系统 (如 Yarn、K8S)申请资源来启动
AM,然后再向 AM 中的 Dispatcher 提交作业。
当作业到 Dispatcher 后,Dispatcher 会首先启动一个 JobManager 组件,然
后 JobManager 会向 ResourceManager 申请资源来启动作业中具体的任务。这
Apache Flink 进阶(一):Runtime 核心机制剖析 < 7
时根据 Session 和 Per-Job 模式的区别, TaskExecutor 可能已经启动或者尚未启
动。如果是前者,此时 ResourceManager 中已有记录了 TaskExecutor 注册的资
源,可以直接选取空闲资源进行分配。否则,ResourceManager 也需要首先向外
部资源管理系统申请资源来启动 TaskExecutor,然后等待 TaskExecutor 注册相
应资源后再继续选择空闲资源进程分配。目前 Flink 中 TaskExecutor 的资源是通过
Slot 来描述的,一个 Slot 一般可以执行一个具体的 Task,但在一些情况下也可以执
行多个相关联的 Task,这部分内容将在下文进行详述。ResourceManager 选择到
空闲的 Slot 之后,就会通知相应的 TM “将该 Slot 分配分 JobManager XX ”,然
后 TaskExecutor 进行相应的记录后,会向 JobManager 进行注册。JobManager
收到 TaskExecutor 注册上来的 Slot 后,就可以实际提交 Task 了。
|