我是靠谱客的博主 隐形冬瓜,最近开发中收集的这篇文章主要介绍【原理|架构】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开始作业的运行。

在这里插入图片描述
 
 

二. 架构成员

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

最后

以上就是隐形冬瓜为你收集整理的【原理|架构】Flink系列02:Flink整体架构-成员之间的协调一. 整体架构模型二. 架构成员三. 什么是JobGraph的全部内容,希望文章能够帮你解决【原理|架构】Flink系列02:Flink整体架构-成员之间的协调一. 整体架构模型二. 架构成员三. 什么是JobGraph所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部