flink作为一个分布式计算引擎,它可以在所有主流集群资源管理器中,如Hadoop YARN
,Apache Mesos
和Kubernetes
,也可以运行在独立集群中。当然,它还提供了本地运行模式,可以供我们开发测试。
架构组成
flink集群中最重要的两个进程组件是:JobManager 和 TaskManager。
这是典型的主从架构:一个集群中只能有一个JobManager
(HA部署的除外,它会有一个leader jobmager
和一个standby jobmanager
),但是可以有多个TaskManager
。
JobManager
JobManager
负责管理协调管理任务执行,主要功能如下:
- 调度任务执行
- 响应任务状态变化(任务完成,失败等)
- 协调checkpoints的生成(checkpoints的作用后续会讲)
- 失败恢复重启等等
JobManager
中有三大组件:
- ResourceManager
ResourceManager
负责资源供给和分配,它管理着task slots(flink中任务的执行单元,可以类比线程进行理解)。 - Dispatcher
Dispatcher
提供了REST接口给客户端,用来提交任务至flink集群运行,同时也提供了webui方便用户查看job执行信息。 - JobMaster
JobMaster
负责管理JobGraph(job执行图)的执行。多个job可以同时运行在一个flink集群上,每个job拥有自己的JobMaster
。
TaskManager
TaskManager
执行任务,并且缓存中间状态。 TaskManager
至少要有一个,最小的资源调度执行单元叫做task slot
。一个TaskManager
中task slot
的数量意味着这个TaskManager
可并发执行任务的数量。
flink job提交运行流程解析
在一个job的提交执行过程中,会涉及到以下几个进程:
-
Client
Client
即客户端进程用于准备jar包,提交任务执行流图到JobManager
上。 JobManger
TaskManager
过程如下:
-
Client
解析程序代码,优化数据流生成JobGraph。 -
Client
将job提交至JobManager
。 -
JobManager
收到job后生成执行流图,并申请TaskManager
资源。 -
JobManager
将任务分配到指定的TaskManager
上。 -
TaskManager
启动执行任务。 -
JobManager
接收来自TaskManager
的心跳信息,并随时将job状态同步给Client
(如果Client
没关闭的情况下)。 - 在任务执行过程中,
JobMangager
定时通知TaskManager
生成checkpoint。 -
Client
可通过命令或者用户直接通过JobManager
的webui控制job的取消,停止。