【原理|架构】Flink系列02:Flink整体架构-成员之间的协调

导读:本篇文章讲解 【原理|架构】Flink系列02:Flink整体架构-成员之间的协调,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

 

一. 整体架构模型

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开始作业的运行。

在这里插入图片描述
 
 

二. 架构成员

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

在这里插入图片描述

作用 描述
作业执行 一个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中。
在这里插入图片描述
 

2. jobGraph

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/65402.html

(0)
小半的头像小半

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!