Flink核心架构如下图所示
和Spark类似,Flink也是采用了Master-slave的主从架构模型,主要包含三个模块,Client,Jobmanager,TaskManager。下面我将依依介绍各个模块的功能。
1.Client
Client 不是运行时和程序执行的一部分,而是用于准备数据流并将其发送给 JobManager。之后,客户端可以断开连接(分离模式),或保持连接来接收进程报告(附加模式)。客户端可以作为触发执行 Java/Scala 程序的一部分运行,也可以在命令行进程./bin/flink run ...
中运行。
这是官网的原话,说的直白点就是,flink 客户端主要负责flink job的提交工作。
2.JobManager
jobmanager在flink中扮演master角色,类似于spark中的Master,主要负责资源分配和任务调度,以及协调checkpoint(coordinator),以及协调中失败中恢复。具体JobManager又包含三个组件。
2.1 Dispatcher
Dispatcher 提供了一个 REST 接口,用来提交 Flink 应用程序执行,并为每个提交的作业启动一个新的 JobMaster。它还运行 Flink WebUI 用来提供作业执行信息。
2.2 JobMaster
JobMaster 负责管理单个JobGraph的执行。Flink 集群中可以同时运行多个作业,每个作业都有自己的 JobMaster。
2.3 ResourceManager
ResourceManager 负责 Flink 集群中的资源提供、回收、分配 - 它管理 task slot。Flink 为不同的环境和资源提供者(例如 YARN、Mesos、Kubernetes 和 standalone 部署)实现了对应的 ResourceManager。在 standalone 设置中,ResourceManager 只能分配可用 TaskManager 的 slots,而不能自行启动新的 TaskManager。
3.TaskManager
TaskManager是Flink中实际参与运算的节点,Flink中至少有一个TaskManager,TaskManager中资源调度的最小单位为task slot,task slot的数量表示并发处理task的能力。
4.Flink执行流程
1.Flink 客户端向集群提交一个flink application。
2.cluster manager 找到一台节点启动jobmanager。
3.flink 客户端向jobmanager的dispatcher提交一个job。
4.dispatcher为这个flink job启动一个jobmaster。
5.jobmaster向resourcemanager申请task运行所需的资源。
6.resourcemanager本身没有资源,所以找到cluster manager,让他帮忙寻找资源。
7.cluster manager启动一个节点作为集群的taskmanager。(taskmanager中有task slot资源)
8.resourcemanager向taskmanager申请task slot资源。
9.taskmanager向jobmaster提供task slot资源。
10.jobmanager将task提交到taskmanager 中执行。
slot资源。
10.jobmanager将task提交到taskmanager 中执行。