Apache Flink是什么?对于这个问题,Apache软件基金会官方给出了定义:Flink是一种框架和分布式处理引擎,主要用于对无界和有界数据流进行有状态计算。
本文将从以下几个方面来了解flink运行原理:
【Flink运行时四大组件】
【Flink任务提交流程(standalone模式)】
【基于Yarn的Flink任务提交流程】
1.flink运行时四大组件
①作业管理器(jobmanager)
应用程序执行的主过程中,执行应用程序会被jobmanager最先接收,这个应用程序会包括:作业图(jobGraph),逻辑数据流图(logical dataflow graph) 和打包了所有的类,库和其他资源的jar包。jobmanager会向资源管理器请求执行任务必要的资源,也就是任务管理器上的插槽(slot).一旦它获取了足够的资源,就会将执行图分发到真正运行它们的taskmanager上。在实际运行中,由jobmanager负责协调各项中央操作。
②任务管理器(taskmanager)
taskmanager是指工作进程。Flink中包含了多个taskmanager,每个taskmanager中又存在着一定数量的插槽(slots),插槽的数量限制了TaskManager能够执行的任务数量。开始运行后,taskmanage中的插槽会被注册给资源管理器,在收到指令后,taskmanager会提供多个插槽任jobmanager调用。jobmanager通过给插槽分配tasks来执行。
运行同一应用程序的taskmanager可以在执行过程中互相交换数据。
③资源管理平台(resourcemanager)
资源管理器在作业管理器申请插槽资源时,会将有空闲插槽的任务管理器分配给作业管理器。如果没有足够的插槽来满足作业管理器的请求时,它还会向资源提供平台发起会话,以提供启动takmanager进程的容器。
④分发器(dispatcher)
1)提供了REST接口,在应用提交时可以跨作业运行,。
2)在应用被提交执行的情况下,分发器启动将应用提交给jobmanager。
3)webui会由dispatcher启动,以便便展示和监控作业的执行信息。
4)这取决于应用提交运行的方式取决了是否需要dispatcher。
2.flink任务提交流程(standalone模式)
①由应用端(App)提交应用给分发器(dispatcher)
②Dispatcher启动并提交应用给JobManager
③JobManager向resourcemanager请求slots(插槽)资源
④resourcemanager收到了JobManager的资源请求后,就去启动TaskManager
⑤TaskManger启动之后,会去resourcemanager注册slots
⑥resourcemanager收到TaskManger的注册slots请求后,会给TaskManger发出提供slot的指令
⑦TaskManager接到指令后,JobManager会被告知已有所需数量的slots使用。
⑧JobManager得知有足够的slots可以使用后,就会提交要执行的任务给TaskManager
⑨与此同时,TaskManager之间也会进行数据的交换
3.基于Yarn的flink任务提交流程
①Flink客户端上传flink的jar包和配置到HDFS
②客户端提交job到resourcemanager(yarn)
③resourcemanager启动ApplicationMaster,同时ApplicationMaster启动JobManager,之后jobmanager从HDFS上加载Flink的jar包和配置环境(除了yarn的resourcemanager,flink也有自己的resourcemanager,只不过它不管理资源,而是由yarn的resourcemanager管理资源)
④jobmanager向resourcemanager申请资源
⑤jobmanager申请到资源后,启动TaskManager,同样TaskManager向flink的ResourceManager注册slot,因此jobmanager得知有足够的slots可以使用,就会将job任务提交给TaskManager去执行,同时taskmanager会从HDFS加载flink的jar包和环境配置。
注:第二张图描述的是job模式,每提交一个job就会有对应的一个集群,而session模式是会先创建一个包含上述第二张图组件的集群,其运行流程与第二张图是相同的。