天天看点

【原理|架构】Flink系列02:Flink整体架构-成员之间的协调一. 整体架构模型二. 架构成员三. 什么是JobGraph

本篇希望对flink的架构有一个概念上的认识,角色之间是如何交互的。

文章目录

  • 一. 整体架构模型
  • 二. 架构成员
    • 1. Jobmanager
    • 2. TaskManager
    • 3.Client
  • 三. 什么是JobGraph
    • 1. 用户程序转换为JobGraph
    • 2. jobGraph

一. 整体架构模型

flink运行时有两种类型的进程组成:一个JobManager和若干个TaskManager,也是典型的主从架构。

高可用(HA)设置中可能有多个 JobManager,其中一个始终是 leader,其他的则是 standby。

角色 职责
Jobmanager 管理集群的计算资源、job的管理与调度执行、checkpoint的协调
taskmanager 提供计算资源供job运行
Client 解析job为JobGraph对象,然后提交到Jobmanager运行,并监控Job运行的状态

一个job被提交到集群的过程

客户将flink jar提交到client端,client将job解析为JobGraph实例,然后将jar和JobGraph一起通过RPC提交到jobmanager,提交成功后Jobmanager返回JobClient给client,用于job的通讯,可以用来获取job的状态。jobmanager将job拆分成不同的task并提交到TaskManagr开始作业的运行。

【原理|架构】Flink系列02:Flink整体架构-成员之间的协调一. 整体架构模型二. 架构成员三. 什么是JobGraph

二. 架构成员

1. Jobmanager

jobmanager进程有三个组件组成

组件 作用
ResourceManager

1. 资源管理:管理task slots。slots资源调度的单位

2. Flink 为不同的环境和资源提供者(例如 YARN、Mesos、Kubernetes 和 standalone)实现了对应的 ResourceManager

3. standalone模式中,ResourceManager 只能分配可用 TaskManager 的 slots,不能启动新的。

Dispatcher

1. 提供了一个 REST 接口,用来提交 Flink 应用程序执行,并为每个作业启动一个新的JobMaster。

2. 运行 Flink WebUI 用来提供作业执行信息。

JobMaster 管理单个JobGraph的执行。

Jobmanager的作用:

  • 将jobGraph转换成Execution Graph:jobGraph只是描述了逻辑图,Execution Graph会将Graph拆分成不同的执行单元(task),提交到taskmanager不同的slot上。
  • 网络通讯:jobmanager、client、taskmanager之间通过Akka(rpc通讯)实现通讯。其中Akka的核心组件Actor System实现了远端通讯。
  • job的接收与分发
  • TaskManager的注册:当taskmanager启动时,它会通过akka向jobmanager进行注册,将自己的信息交给Jobmanager让它维护。而且和taskmanager之间进行heartbeat操作。

2. TaskManager

【原理|架构】Flink系列02:Flink整体架构-成员之间的协调一. 整体架构模型二. 架构成员三. 什么是JobGraph
作用 描述
作业执行 一个taskmanager中对应多个slot,对于JVM进程,一个slot其实就是一个线程,slot集其实就是线程池。
Shuffle Environment管理 当有一些算子执行需要shuffle时,需要Data Exchange。
Memory Management内存管理 当task在执行时,会有数据到来,这需要申请一些内存单元,管理这些数据,例如序列化反序列化。
Rpc通讯 通过Akka的核心实现Actor System,进行网路通讯。
Network Management网络数据交换 通过netty实现taskmanager之间进行数据交互(上下游或shuffle)
接受Jobmanager的资源申请 jobmanager资源的申请,taskmanager返回申请的结果给jobmanager。

3.Client

client用于生成执行环境,进入用户的main方法生成jobGraph对象,然后提交任务,将jobGraph和作业所依赖的包提交到jobmanager的dispacher。

三. 什么是JobGraph

1. 用户程序转换为JobGraph

通过DataStream、DataSet API、Flink SQl、Table API等方式可以实现Flink job jar,执行flink run将job提交到Flink。

client接收到jar后,执行器通过反射找到指定类的main方法并执行,执行有本地执行,远程执行,或在yarn上执行。

调用execute将程序转换为steamGraph,接着转换成JobGraph,然后提交到Dispatcher中。

【原理|架构】Flink系列02:Flink整体架构-成员之间的协调一. 整体架构模型二. 架构成员三. 什么是JobGraph

2. jobGraph

用户的程序不管是通过那种方式实现,Executor都会将抽象为streamGraph,streamGraph只是Dataflow的一个表达,没有描述具体执行时算子并发的操作。

JobGraph进一步描述了具体执行时算子的并发、算子之间的交互关系。同样通过DAG的方式表达了(不同Flink接口实现的)用户程序。JobGraph描述了job的详情,是客户端与集群之间的job载体。

参考:

https://time.geekbang.org/course/detail/100058801-278258

继续阅读