Apache Flink的架构流程@TOC
Apache Flink的架构流程
Apache Flink 是为分布式、高性能、随时可用以及准确的流处理应用程序打造的开源流处理框架。实现了鱼与熊掌兼得的实时计算框架,它既包含了如Storm一样的低延迟的实时计算又完成了如Spark Streaming高吞吐量保证 exactly-once 语义。
其实现流批一体,本身的流式框架实现批处理是将批处理当作特殊的流处理来实现。
下面是Apache Flink的基础架构
这是一张再熟悉不过的图片,几乎了解过Flink的社畜都知道这张图,其中底层为数据来源、基础环境;Flink Runtime 这层是一套统一的分布式作业执行引擎,DataStream 和 DataSet 两套 API,分别用来编写流作业与批作业;这两者具有很高的灵活性但是学习成本高代码更加多,不够抽象;在上一层的封装则是恰恰相反的,提供了JAVA API,Scala API, SQL API(已经从弟弟升级为一级API)。
Flink Standalone 模式
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
JobManager 的功能主要有:
● 将 JobGraph 转换成 Execution Graph,最终将 Execution Graph 拿来运行;
● Scheduler 组件负责 Task 的调度;
● Checkpoint Coordinator 组 件 负 责 协 调 整 个 任 务 的 Checkpoint, 包 括Checkpoint 的开始和完成;
● 通过 Actor System 与 TaskManager 进行通信;
● 其它的一些功能,例如 Recovery Metadata,用于进行故障恢复时,可以从Metadata 里面读取数据。
2、TaskManager
TaskManager 里面的主要组件有:
● Memory & I/O Manager,即内存 I/O 的管理;
● Network Manager,用来对网络方面进行管理;
● Actor system,用来负责网络的通信;
TaskManager 被分成很多个 TaskSlot,每个任务都要运行在一个 TaskSlot里面,TaskSlot 是调度资源里的最小单位。
3、程序如何从Table API转换为Job Graph
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