Flink分层架构

2.1 Flink结构与支持

Flink是一个分层架构的系统,不同层的栈建立在其下层基础上,并且每一层所包含的组件都提供了特定的抽象,用来服务于上层组件。Flink分层的组件栈如下图所示(从下至上):
Flink分层架构_第1张图片

  1. 部署:Flink 支持本地运行、能在独立集群或者在被 YARN 或 Mesos 管理的集群上运行, 也能部署在云上。
  2. 运行:Flink 的核心是分布式流式数据引擎,意味着数据以一次一个事件的形式被处理。
  3. API:DataStream、DataSet、Table、SQL API。
  4. 扩展库:Flink 还包括用于复杂事件处理,机器学习,图形处理和 Apache Storm 兼容性的专用代码库。
API支持 Libs支持 整合支持
DataStream 复杂事件处理(CEP) Flink on YARN、Storm
DataSet 机器学习(FlinkML) HDFS、Tachyon、S3、XtreemFS
Table 图分析处理(Gelly) Kafka、RabbitMQ
Streaming 关系数据处理(Table) HBase、ElasticSearch
2.2 Deployment调度层

该层主要涉及了Flink的部署模式,Flink支持多种部署模式:本地、集群(Standalone/YARN)、云(GCE/EC2)。Standalone部署模式与Spark类似,Flink on YARN的部署模式如下图所示:
Flink分层架构_第2张图片了解YARN的话,对上图的原理非常熟悉,实际Flink也实现了满足在YARN集群上运行的各个组件:Flink YARN Client负责与YARN RM通信协商资源请求,Flink JobManager和Flink TaskManager分别申请到Container去运行各自的进程。通过上图可以看到,YARN AM与Flink JobManager在同一个Container中,这样AM可以知道Flink JobManager的地址,从而AM可以申请Container去启动Flink TaskManager。待Flink成功运行在YARN集群上,Flink YARN Client就可以提交Flink Job到Flink JobManager,并进行后续的映射、调度和计算处理。

2.3 Runtime层

Runtime层提供了支持Flink计算的全部核心实现,比如支持分布式Stream处理、JobGraph到ExecutionGraph的映射、调度等等,为上层API层提供基础服务。

2.4 API层

API层主要实现了面向无界Stream的流处理和面向Batch的批处理API,其中面向流处理对应DataStream API,面向批处理对应DataSet API。

2.5 Libraries层

Libraries层也可以称为Flink应用框架层,根据API层的划分,在API层之上构建的满足特定应用的实现计算框架,也分别对应于面向流处理和面向批处理两类。

面向流处理支持:CEP(复杂事件处理)、基于SQL-like的操作(基于Table的关系操作)

面向批处理支持:FlinkML(机器学习库)、Gelly(图处理)

  1. 运行时层以JobGraph形式接收程序。JobGraph即为一个一般化的并行数据流图(data flow),它拥有任意数量的Task来接收和产生data stream。
  2. DataStream API和DataSet API都会使用单独编译的处理方式生成JobGraph。DataSet API使用optimizer优化器来决定针对程序的优化方法,而DataStream API则使用stream builder流生成器来完成该任务。
  3. 在执行JobGraph时,Flink提供了多种候选部署方案(如local,remote,YARN等)。
  4. Flink附随了一些产生DataSet或DataStream API程序的的类库和API:处理逻辑表查询的Table,机器学习的FlinkML,图像处理的Gelly,复杂事件处理的CEP。

你可能感兴趣的:(Flink)