天天看点

Apache Flink的架构流程Apache Flink的架构流程

Apache Flink的架构流程@TOC

Apache Flink的架构流程

Apache Flink 是为分布式、高性能、随时可用以及准确的流处理应用程序打造的开源流处理框架。实现了鱼与熊掌兼得的实时计算框架,它既包含了如Storm一样的低延迟的实时计算又完成了如Spark Streaming高吞吐量保证 exactly-once 语义。

其实现流批一体,本身的流式框架实现批处理是将批处理当作特殊的流处理来实现。

下面是Apache Flink的基础架构

Apache Flink的架构流程Apache Flink的架构流程

这是一张再熟悉不过的图片,几乎了解过Flink的社畜都知道这张图,其中底层为数据来源、基础环境;Flink Runtime 这层是一套统一的分布式作业执行引擎,DataStream 和 DataSet 两套 API,分别用来编写流作业与批作业;这两者具有很高的灵活性但是学习成本高代码更加多,不够抽象;在上一层的封装则是恰恰相反的,提供了JAVA API,Scala API, SQL API(已经从弟弟升级为一级API)。

Flink Standalone 模式

Apache Flink的架构流程Apache Flink的架构流程

1)Standalone 模式可以是单机版也可以是分布式

2)Standalone 具体的提交流程:

首先,由Flink Cluster Client提交job graph到Master,在Master中先经过Dispacher;Dispacher产生JobManager,JobManager将向Standalone ResourceManager申请资源,启动Task Manager

在Master中,Standalone ResourceManager主要作用是对资源进行管理;

TaskManager 启动之后,会有一个注册的过程,注册之后Job Manager 再将具体的 Task 任务分发给这个 TaskManager 去执行。

下面就具体谈谈其中的细节:

1、JobManager

Apache Flink的架构流程Apache Flink的架构流程

JobManager 的功能主要有:

● 将 JobGraph 转换成 Execution Graph,最终将 Execution Graph 拿来运行;

● Scheduler 组件负责 Task 的调度;

● Checkpoint Coordinator 组 件 负 责 协 调 整 个 任 务 的 Checkpoint, 包 括Checkpoint 的开始和完成;

● 通过 Actor System 与 TaskManager 进行通信;

● 其它的一些功能,例如 Recovery Metadata,用于进行故障恢复时,可以从Metadata 里面读取数据。

2、TaskManager

Apache Flink的架构流程Apache Flink的架构流程

TaskManager 里面的主要组件有:

● Memory & I/O Manager,即内存 I/O 的管理;

● Network Manager,用来对网络方面进行管理;

● Actor system,用来负责网络的通信;

TaskManager 被分成很多个 TaskSlot,每个任务都要运行在一个 TaskSlot里面,TaskSlot 是调度资源里的最小单位。

3、程序如何从Table API转换为Job Graph

Apache Flink的架构流程Apache Flink的架构流程

Blink以及在Flink1.9版本中与Flink合并到一起,合并后在 Flink

1.9 中会存在两个 Planner:Flink Planner 和 Blink Planner;由于Blink是阿里起初以流批一体为目标,建立的一个Flink的重要分支,更加符合我们的需求,所以这里以 Blink Planner中的Job Graph作为示例。

SQL语句传入Blink Planner中后,由解析器将SQL语句解析为 SQLNode Tree(抽象语法树),紧接着做Validator(验证),将语法树放到 FunctionManger 和 CatalogManger中检验。 FunctionManger 主要是查询用户定义的 UDF,以及检查 UDF 是否合法,CatalogManger 主要是检查这个 Table或者 Database 是否存在。验证通过后,将生成Operation DAG(有向无环图)。此步骤之后,JAVA API,Scala API, SQL API将合到一处,有相同的优化和转化步骤。

Operation DAG(有向无环图)转化为 RelNode( 关系表达式 ) DAG

优化器将对RelNode( 关系表达式 ) DAG进行优化,并传送到FunctionManger 和 CatalogManger中检验语句的正确性,完成后生成Physical Rel DAG。

Blink Planner的优化器中batch和stream大多数的优化是共享的,但是,对 Batch 而言,它没有 state 的概念,而对于 Stream而言,它是不支持 sort 的,所以目前 Blink Planner 中,还是运行了两套独立的规则集(Rule Set)。

当生成Physical Rel DAG转化为 ExecNode DAG就是可执行的图计算了,可以算是blink的执行层,会执行大量的 CodeGen操作(代码编译)和非 Code 的 Operator 操作,这将 ExecNode 转化为 Transformation DAG。得到 Transformation DAG 后,最终会被转化成Job Graph。

参考文献;

Friedman E , Tzoumas K . Introduction to Apache Flink: Stream Processing for Real Time and Beyond[J]. 2016.

阿里大神们.零基础入门:从0到1学会Apache Flink[电子书].2019

https://yq.aliyun.com/download/4013

继续阅读