Flink架构与基本原理
1.Flink架构
(图-1 Flink Runtime 来自:https://ci.apache.org/projects/flink/flink-docs-release-1.6/concepts/runtime.html)
2.基本原理
2.1 Jobmanager
JobManager(下称为JM)负责整个Flink集群任务的调度以及资源的管理,从客户端中获取提交的应用,然后根据集群中的taskmanager的slot的使用情况,为提交的应用分配响应slot资源。JM是整个集群的master节点,其可以理解为一个MR任务的ApplicationMaster,负责整个集群的资源管理和任务调度。JM和taskmanager之间通信通过actor system进行通信(akka框架),JM定期能够获取任务的运行情况发给客户端。同时JM也会触发checkpoint的操作,JM会根据checkpoint的定时时间,向taskmanager下发checkpoint的指令。
2.2 Taskmanager
Taskmanager(下称为TM)相当于整个集群的slave节点,负责具体的任务执行和对应任务在每个节点上的资源申请与管理。客户端通过将编号的FLink应用的编译打包提交给JM,然后JM会根据已经注册在JM中的TM的资源申请情况,将任务分配给有资源的TM节点,然后启动并运行任务。TM从JM接收到需要部署的任务后,使用slot资源启动task,建立数据接入的网络连接,接收数据并开始数据处理。及同时TM之间的数据交互都是通过数据流的方式进行的。
Flink 中的工作进程。通常在Flink 中会有多个TaskManager 运行,每一个TaskManager都包含了一定数量的插槽(slots)。插槽的数量限制了TaskManager 能够执行的任务数量。启动之后,TaskManager 会向资源管理器注册它的插槽;收到资源管理器的指令后,TaskManager 就会将一个或者多个插槽提供给JobManager 调用。JobManager 就可以向插槽分配任务(tasks)来执行了。在执行过程中,一个TaskManager 可以跟其它运行同一应用程序的TaskManager 交换数据。Slot才是任务执行具体的执行单元。
3.任务提交流程
如果我们将Flink 集群部署到YARN 上,那么就会有如下的提交流程:
Flink 任务提交后, Client 向HDFS 上传Flink 的Jar 包和配置, 之后向Yarn ResourceManager 提交任务, ResourceManager 分配Container 资源并通知对应的NodeManager 启动ApplicationMaster,ApplicationMaster 启动后加载Flink 的Jar 包和配置构建环境,然后启动JobManager,之后ApplicationMaster 向ResourceManager申请资源启动TaskManager , ResourceManager 分配Container 资源后, 由ApplicationMaster 通知资源所在节点的NodeManager 启动TaskManager ,NodeManager 加载Flink 的Jar 包和配置构建环境并启动TaskManager,TaskManager启动后向JobManager 发送心跳包,并等待JobManager 向其分配任务。
- 点赞
- 收藏
- 关注作者
评论(0)