Flink系列 4. 架构与组件介绍


Flink 核心模块架构图

Flink 内部架构图

1.1 JobManager

  • JobManager(作业管理器)控制一个应用程序执行的主进程,也就是说,每个Flink程序都会被对应的 JobManager 控制执行。
  • JobManager 会先接收到要执行的应用程序,这个应用程序包括图作业(JobGraph)逻辑数据流图(logical dataflow graph)和打包了所有类及其依赖的 jar 文件
  • JobManager 会将 JobGraph 转换成一个物理层面的数据流图,这个图被称为执行图(ExecutioGraph),包含了所有可以并发执行的任务。
  • JobManager 会向 ResourceManager 请求执行任务必要的资源(也就是任务管理器(TaskManager)上的插槽(slot)),一旦获取到足够的资源,就会将执行图分发到真正执行任务的TaskManager 上,而运行过程中JobManager 会负责所有需要中央协调的操作,比如检查点(CheckPoint)的协调。

1.2 TaskManager

  • TaskManager(任务管理器)是Flink 的工作进程(JVM 进程),Flink 集群中会运行多个 TaskManager ,每个 TaskManager 都包含了一定数量的 slot(插槽),slot 的数量限制了 TaskManager 能够执行任务的数量。
  • TaskManager 启动之后会向资源管理器注册它的 slot。
  • TaskManager 收到资源管理器资源需求的指令后,会将所需的 slot 提交 JobManager 调用,JobManager 就可以向 slot 分配 task(任务)执行任务了
  • TaskManager 在执行过程中可以和其他运行同一任务的 TaskManager 交换数据。
  • TaskManager 是 JVM 进程,它可能会在独立的线程上执行一个或多个 subtask。
  • TaskManager 通过task slot来进行控制能接收到多少个 task,(一个 TaskManager 至少有一个slot)

TaskManager 与 Slots

1.3 ResourceManager

ResourceManager(资源调度器)主要负责管理 TaskManager 的 slot,Flink 为不同环境和资源管理工具供了不同的资源管理器,如YARN、Mesos、K8s以及standalone 部署模式。
当 JobManager 申请 slot 时,ResourceManager 会将有空闲 slot 的 TaskManager 分配给 JobManager ,如果 ResourceManager 没有足够的 slot 来满足 JobManager 的需求,那么需要向资源平台发起会话,以提供启动 TaskManager 进程的容器。

1.4 slots

  • slot 为 Flink 集群中可使用资源的单元,相当于所有资源的子集。
  • slot 是一个静态概念,是指 TaskManager 具有的并发执行的能力。
  • slot 可以看做是对资源进行隔离,主要进行内存的隔离,不同的 slot 使用的 CPU 是可以共享的。
  • 为了避免不同 slot 共享 CPU,可以按照 CPU 的核心数量设置 slot 数量,默认的 slot 数量就是CPU核心数量。
  • 默认情况下,Flink 允许共享 slot 即使它们是不同任务的子任务,这样一个slot 就可以保存作业的整个管道。

Slot 并行度示意图

1.5 Dispacher:分发器

还有一个组件在架构图中没有展示出来,就是Dispacher(分发器)。

  • Dispacher 可以跨作业运行,它为作业提供了 REST 接口。
  • Dispacher 可以在应用被提交执行时,启动并将应用移交给一个 JobManage。
  • Dispacher 会启动一个 WebUI,用来方便地展示和监控作业执行的信息。
  • Dispacher 在架构中不是必须的,这取决于应用提交运行的方式。

4. 执行图

  • Flink 中的执行图可以分为四层:StreamGraph -> JobGraph -> ExecutionGraph -> 物理执行图
  • StreamGraph: 根据用户通过StreamAPI 编写的代码生成的最初的图,用来表示程序的拓扑结构
  • JobGraph: StreamGraph经过优化后生成了 JobGraph,提交给 JobManager的数据结构,主要的优化为将多个符合条件的节点chain在一起作为一个节点。
  • ExecutionGraph: JobManager 根据 JobGraph 生成 ExecutionGraph, ExecutionGraph 是JobGraph 的并行化版本, 是调度层最核心的数据结构。
  • 物理执行图: JobManager 根据ExecutionGraph对 job进行并行调度后,在各个TaskManager 上部署task 后形成的 “图”,并不是一个具体的数据结构

执行图图示

5. 并行度

  • 一个特定的算子的子任务(subtask)的个数被称之为其并行度(parallelism)
  • 不同的算子可能有不同的并行度
  • 一个 Stream 的并行度,可以认为就是其所有算子的最大并行度

并行度图示

并行度拆解图示


文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
 上一篇
GreenPlum 数据存储介绍 GreenPlum 数据存储介绍
1. 数据存储分布式数据存储基本原理相对简单,实现比较容易,很多数据库中间件也可以做到基本的分布式数据存储。Greenplum 在这方面不单单做到了基本的分布式数据存储,还提供了很多更高级灵活的特性,譬如多级分区、多态存储。Greenplu
2020-05-06
下一篇 
GreenPlum 架构介绍 GreenPlum 架构介绍
1. OLTP 与 OLAP1.1 OLTP OLTP(on-line transaction processing)联机事务处理 OLTP 是传统的关系型数据库的主要应用,一般都是高可用的在线系统,以小的事务以及小的查询为主,评估其系统的
2020-05-04
  目录