flink作为一个分布式计算引擎,它可以在所有主流集群资源管理器中,如Hadoop YARNApache MesosKubernetes,也可以运行在独立集群中。当然,它还提供了本地运行模式,可以供我们开发测试。

架构组成

flink集群中最重要的两个进程组件是:JobManagerTaskManager
这是典型的主从架构:一个集群中只能有一个JobManager(HA部署的除外,它会有一个leader jobmager和一个standby jobmanager),但是可以有多个TaskManager

JobManager

JobManager负责管理协调管理任务执行,主要功能如下:

  1. 调度任务执行
  2. 响应任务状态变化(任务完成,失败等)
  3. 协调checkpoints的生成(checkpoints的作用后续会讲)
  4. 失败恢复重启等等

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。一个TaskManagertask slot的数量意味着这个TaskManager可并发执行任务的数量。

flink job提交运行流程解析

flink java调度 flink调度平台_执行流


在一个job的提交执行过程中,会涉及到以下几个进程:

  • ClientClient即客户端进程用于准备jar包,提交任务执行流图到JobManager上。
  • JobManger
  • TaskManager

过程如下:

  1. Client解析程序代码,优化数据流生成JobGraph。
  2. Client将job提交至JobManager
  3. JobManager收到job后生成执行流图,并申请TaskManager资源。
  4. JobManager将任务分配到指定的TaskManager上。
  5. TaskManager启动执行任务。
  6. JobManager接收来自TaskManager的心跳信息,并随时将job状态同步给Client(如果Client没关闭的情况下)。
  7. 在任务执行过程中,JobMangager定时通知TaskManager生成checkpoint。
  8. Client可通过命令或者用户直接通过JobManager的webui控制job的取消,停止。