集群架构

  • JobManager:管理节点,每个集群至少一个,管理整个集群的计算资源,Job 管理与调度执行,以及 Checkpoint 协调。
  • TaskManager:每个集群有多个 TaskManager,负责计算资源提供。
  • Client:本地执行应用 main() 方法,解析 JobGraph 对象,并最终将 JobGraph 提交到 JobManager 运行,同时监控 Job 执行的状态。

Flink-集群架构

JobManager

功能及组件:

  • Checkpoint Coordinator 组件用于协调每个 TaskManager 中的 Checkpoint 的协调和执行;
  • Client 提交的 JobGraph(逻辑图) 生成 Execution Graph(物理执行图) ,Execution Graph 会被拆分不同的执行单元,提交到 TaskManager 中执行;
  • 将一个 Task 拆分为不同的 Task,并部署到不同的 TaskManager 上运行(JobManagerTaskManager 通过 Task 进程进行交互);
  • JobManagerClientTaskManager 之间的都是通过 Akka 实现的 RPC 协议进行通信,核心组件是 Actor System
  • 通过 Job DispatchClient 提交的 Job 进行拆分,分发到各个 TaskManager
  • ResourceManager 管理资源;
  • 管理 TaskManager 注册;

Flink-JobManager

TaskManager

功能及组件:

  • 执行分发到该 TaskManager 上的任务,在 Task Scheduling 中启动多个 Task Slot 线程,用于执行任务;
  • Network Manager 用于 TaskManger 之间交互(TaskMangerJobManager 交互由 Actor System 实现);
  • Data Exchange 组件用于数据交互;
  • Shuffle Environment 在数据交互过程中出现的 Shuffle 就由该组件对数据进行传输和交互;
  • Actor SystemJobManager
  • Memory Management 对内存单元进行管理;
  • TaskManager 还负责向 JobManager 中的 ResourceManager 进行注册;

Flink-TaskManager

Client

  • 用于提交 Job 的机器会在本地启动一个 Client 的进程,用于解析用户提交的 Jar;
  • 将 Jar 中的 main() 方法拿出来执行,执行用于生成一个 JobGraph 对象;
  • 将 Job 以及依赖包提交到 JobManager

JobGraph

功能:

  • 通过有向无环图表达用户程序;
  • 不同程序的抽象表达(DataStream API,DataSet API,Flink SQL,Table API);
  • 客户端和集群之间的 Job 描述载体;

部署模式

  • Session Mode:共享 JobManager 和 TaskManager,所有提交的 Job 都在一个生命周期中运行。
  • Per-Job Mode:独占 JobManager 和 Task,每个 Job 单独启动一个生命周期。
  • Application Mode:Application 的 main() 运行在集群中(Cluster),每个 Application 对应一个生命周期,其中可以包含多个 Job。

PS:Application Mode 模式是 Flink 1.11 版本中新加入的部署模式,介绍如下(摘抄自网络):

  • 每个 Application 对应一个 JobManager,且可以运行多个 Job;
  • 客户端无需将所有依赖上传到 JobManager,仅负责 Job 的提交;
  • Application 的 main() 方法运行在 JobManager 中,将 JobGraph 的生成放在集群中运行,客户端压力降低;

优点:降低网络带宽的消耗和客户端的负载,实现 Application 间的资源隔离,Application 内实现资源共享

缺点:太新,没有经过实际生产环境的检验