Flink入门(二)——Flink架构介绍

一、基本组件栈面试

了解Spark的朋友会发现Flink的架构和Spark是很是相似的,在整个软件架构体系中,一样遵循着分层的架构设计理念,在下降系统耦合度的同时,也为上层用户构建Flink应用提供了丰富且友好的接口。segmentfault

https://mmbiz.qpic.cn/mmbiz_p...file网络

Flink分为架构分为三层,由上往下依次是API&Libraries层、Runtime核心层以及物理部署层多线程

API&Libraries层架构

做为分布式数据处理框架,Flink同时提供了支撑计算和批计算的接口,同时在此基础上抽象出不一样的应用类型的组件库,如基于流处理的CEP(复琐事件处理库)、SQL&Table库和基于批处理的FlinkML(机器学习库)等、Gelly(图处理库)等。API层包括构建流计算应用的DataStream API和批计算应用的DataSet API,二者都提供给用户丰富的数据处理高级API,例如Map、FlatMap操做等,同时也提供比较低级的Process Function API,用户能够直接操做状态和时间等底层数据。框架

  Runtime核心层机器学习

  该层主要负责对上层不一样接口提供基础服务,也是Flink分布式计算框架的核心实现层,支持分布式Stream做业的执行、JobGraph到ExecutionGraph的映射转换、任务调度等。将DataSteam和DataSet转成统一的可执行的Task Operator,达到在流式引擎下同时处理批量计算和流式计算的目的。分布式

  物理部署层学习

  该层主要涉及Flink的部署模式,目前Flink支持多种部署模式:本地、集群(Standalone、YARN)、云(GCE/EC2)、Kubenetes。Flink可以经过该层可以支持不一样平台的部署,用户能够根据须要选择使用对应的部署模式。大数据

二、基本架构图

https://mmbiz.qpic.cn/mmbiz_j...file

Flink基本架构图

Flink系统主要由两个组件组成,分别为JobManager和TaskManager,Flink架构也遵循Master-Slave架构设计原则,JobManager为Master节点,TaskManager为Worker(Slave)节点。全部组件之间的通讯都是借助于Akka Framework,包括任务的状态以及Checkpoint触发等信息。

1.Client客户端

   客户端负责将任务提交到集群,与JobManager构建Akka链接,而后将任务提交到JobManager,经过和JobManager之间进行交互获取任务执行状态。客户端提交任务能够采用CLI方式或者经过使用Flink WebUI提交,也能够在应用程序中指定JobManager的RPC网络端口构建ExecutionEnvironment提交Flink应用。

2.JobManager

   JobManager负责整个Flink集群任务的调度以及资源的管理,从客户端中获取提交的应用,而后根据集群中TaskManager上TaskSlot的使用状况,为提交的应用分配相应的TaskSlots资源并命令TaskManager启动从客户端中获取的应用。JobManager至关于整个集群的Master节点,且整个集群中有且仅有一个活跃的JobManager,负责整个集群的任务管理和资源管理。JobManager和TaskManager之间经过Actor System进行通讯,获取任务执行的状况并经过Actor System将应用的任务执行状况发送给客户端。同时在任务执行过程当中,Flink JobManager会触发Checkpoints操做,每一个TaskManager节点收到Checkpoint触发指令后,完成Checkpoint操做,全部的Checkpoint协调过程都是在Flink JobManager中完成。当任务完成后,Flink会将任务执行的信息反馈给客户端,而且释放掉TaskManager中的资源以供下一次提交任务使用。

3.TaskManager

   TaskManager至关于整个集群的Slave节点,负责具体的任务执行和对应任务在每一个节点上的资源申请与管理。客户端经过将编写好的Flink应用编译打包,提交到JobManager,而后JobManager会根据已经注册在JobManager中TaskManager的资源状况,将任务分配给有资源的TaskManager节点,而后启动并运行任务。TaskManager从JobManager接收须要部署的任务,而后使用Slot资源启动Task,创建数据接入的网络链接,接收数据并开始数据处理。同时TaskManager之间的数据交互都是经过数据流的方式进行的。

   能够看出,Flink的任务运行实际上是采用多线程的方式,这和MapReduce多JVM进程的方式有很大的区别Flink可以极大提升CPU使用效率,在多个任务和Task之间经过TaskSlot方式共享系统资源,每一个TaskManager中管理多个TaskSlot资源池进行对资源进行有效管理。

声明:本号全部文章除特殊注明,都为原创,公众号读者拥有优先阅读权,未经做者本人容许不得转载,不然追究侵权责任。

关注个人公众号,后台回复【JAVAPDF】获取200页面试题!
5万人关注的大数据成神之路,不来了解一下吗?
5万人关注的大数据成神之路,真的不来了解一下吗?
5万人关注的大数据成神之路,肯定真的不来了解一下吗?

欢迎您关注《大数据成神之路》

大数据技术与架构

相关文章
相关标签/搜索