00:00
呃,接下来给大家讲flink的运行时架构,那这一部分内容主要其实是涉及这样几个方面,首先我们给大家详细的讲一讲flink运行时涉及到的组件,然后讲一讲他们分别负责干哪些内容,干哪些工作,然后呢,我们会给大家详细的介绍一下任务提交时候的这个流程是什么样,然后再给大家介绍一下。真正在任务运行的过程当中,任务调度的原理又是一个什么样的?呃,这里边其实很多概念在之前我们讲这个部署的时候,或者说我们在这个写代码的时候,已经给大家或多或少的有一些涉及了,那这里就相当于是给大家做一个细化和一个深入的了解啊,希望大家能够通过这部分学习,能够对flink的运行机制能够有更深刻的认识啊。好,那首先给大家看一看这个flink里边运行时的组件有哪些。
01:00
啊,整体来说的话,运行时组件四大组件啊,最主要的两个,这个其实大家都已经知道了,是不是就是job manager,有时候翻译成作业管理器对吧,另外一个是task manager,有时候翻译成任务管理器,这两个是最重要的,我们之前已经了解了,除了他俩之外呢,还有两个东西啊,有时候会提到,有时候可能他们的这个,呃,就是这个存在感并不是那么的强,甚至有些架构里面他们就根本没有啊,所以大家可以了解一下啊,看一看,大家看还有一个什么呢?还有一个resource manager。顾名思义,它是一个资源管理器,对,所以它是负责管理我们整个系统里面的资源的,但大家可能会想到,哎,Drive manager不是负责管理和调度的吗?那这个资源还不是drive manager去管的是吧?哎,确实资源是resource manager去做管理和分配,另外还有一个叫dispat dispat这个呃,有时候可以翻译成分发器对吧?大家有时候就知道它是大概干什么样的一个东西就可以了啊,Dispa有这个分发器的意思,有这个接线员的意思,对吧?类似于这样的一些意思。好,那接下来就给大家具体的说一说这四大组件它们在运行时的一些功能啊。
02:23
我们首先看这个draw manager啊,这个这讲起来可能他要做的事情就很多了啊,首先我们先明确一点,Draw manager主要的功能是用来干什么呢?主要的功能它就是控制我们一个流处理应用程序的主进程,对吧?它是一个进程,它一个gbm进程,而且它是控制我们整个执行过程的主进程,所以简单来讲,我们每一个流处理的应用程序都应该对应着一个job manager对吧?哎,正常来讲就是一个应用程序,一个drop manager,这是我们大家能够头脑当中先有的一个概念啊,然后装manager,它它到底是要干什么事情呢?
03:12
他首先应该要先接收到要执行的应用程序,应该还会想到这这涉及的是哪一步啊,这涉及的其实就是我们所说的drop提交的那个过程,对不对啊,你既然是要执行这个drop,那你是不是需要需要先把它提交上去啊,那提交的时候,我们的目的最终应该是要提交给谁呢?其实就是想把它提交给job manager对吧。呃,Drop manager拿到这个应用程序之后,当然这个应用程序里面包括哪些东西呢?它可能就包括当前这个应用程序的作业图啊,叫drop graph,就像我们的那个执行计划,类似一个那样的东西啊,但是还不完全一样,这个具体的区别我们到后面给大家讲啊。另外就是逻辑的数据流图data flow gra和打包了所有类库和其他资源的这个抓包,就我们最后要执行的那个代码,对吧?啊,这是所有装者要接收到的东西,他拿到这个东西之后又干什么呢?
04:17
他要首先要要分析一下这个job graph,把这个job graph呢转换成一个物理层面可以真正执行的。数据流图啊,所以就是这个图,它还要再做这样的一个转换,这个图一般情况会被单独的叫做执行图execution graph。啊,这就有了,又又有了不同的图对吧?啊,那这个图里边就包含了所有可以并发执行的任务,之前他拿到的那个任务,可能就是他只知道我要做哪些任务,对吧?啊,他的并行度是多少,然后经过他的转化之后,那就是真正在物理层面的,你到底怎么并发去执行,他就知道了。
05:02
那当然大家知道,如果他已经知道这个事情之后,是不是接下来他应该把把这种东西要是不要发给干活的人啊,发给他manager对吧?啊,真正让他去干活,除了这些之外,他还会干什么事情呢?他还会去向资源管理器,就是resource manager请求任务所必要的资源。啊,所以大家看这个真正分配资源是啊,So,这个resource manager资源管理器去做的,那这个资源到底是什么东西呢?资源其实就是task manager上的slot,就是我们的那个插槽,那就是要分配的资源,对吧?啊,这就是这个过程啊呃,一旦他获取到了足够的资源,那么他就把那个前面的那个执行图分发到task manager上,那task manager是干活的人,拿到这个就可以跑了,对吧?啊,这就是整个的这个流程啊,在运行过程当中,除了这些事情,Draw manager还要负责中央协调的一些工作,比如说哎,检查点的协调,前面给大家提到,呃,是不是要定期把我们的那个状态做一个快照存到检查点里面去啊,对吧?做这样的一个操作,这个协调就是靠照manager来做协调的啊,这是大大家先有一个这样的一个概念吧,这么说还是有点枯燥啊,接下来我们再过一下看一下这个task manager主要干什么事。
06:27
他主要干的就是就是实际干活对吧?啊,他manager就是flink中的工作进程,那所以大家看他也是一个JVM进程,直观来看的话就是job manager,它是一个G进程,那task manager也是一个JVM进程,那通常呢,Link里边一般会有一个或者多个task manager一般都会有多个,对吧?啊,会有很多个干活的人,每一个task manager都会包含一定数量的插槽。一个插槽就相当于是能够分配的一个最小的资源,也就是我们任务并行执行的时候,具体的一个线程要跑在什么资源上,对吧?啊,这个县城就会跑在具体的这个插槽上面去。
07:14
所以插槽的数量就限制了一个task manager最多能同时执行的任务数量,这个大家理解对吧?啊,这是代表了他这个能力。呃,那那这里边就是启动之后他要干的事情是什么呢?它是像resource manager,去注册一下他的卡槽,得报告给result manager,我这有多少资源,好,你接下来如果有任务的话,可以调用我的这个资源,这就是我们在那个web UI里面看到的available slots。大家还记得有印象对不对?Available slot,就是现在有多少可用的slot啊,那当然了,他如果要是收到了这个指令之后,如果有这个需求的话,需要被一个任务去调用的话,那它就提供自己可用的插槽给这个draw manager去调用了啊,那在执行的过程当中呢,不同的task manager之间互相还可以去交换数据,因为大家知道我们是一个,呃,对,是一个这个分布式的系统,一个大数据的这种集群环境,那是不是不同的task manager之间,他们的数据有可能要做重分区啊,有可能会有这种分区的操作,所以他们互相之间一定是需要互相交换数据的啊,这是大家能够想到的。
08:30
这样一些要点啊,呃,那资源管理器就比较简单了,资源管理器resource manager,它主要就是管理插槽,因为插槽就是我们在flink集群里边最小的这个,呃,资源的单位对吧?啊,这就是我们要管的东西,那flink呢,它为不同的环境和资源管理的平台都提供了资源管理器,就比如雅安K8S对吧,还有这个stand alone,它都有不同的资源管理器。
09:00
大家其实就能想到了,在雅恩模式下,别的我们可能就不说了啊,雅恩模式下它的资源管理器是不是就要跟啊,是不是要跟雅恩的资源管理器要整合在一起,结合在一起啊啊对吧?啊,这个可能我们就更多的是要考虑这个雅恩的资源管理器了啊呃,后面我们这些就不说了啊,就是draw manager,就是申请这个资源,如果有空闲的他就分配下去,对不对,Draw manager resource manager就是做这个事情。最后还有分发器,分发器其实它的工作就更加简单了,它主要提供什么呢?它主要就是为应用提交提供了一个rest的接口。啊,所以大家就会知道,呃,就是当我们这个一个应用被提交的时候,我们的操作是什么呢?其实就是我们从客户端提交,通过他提供的这个rest接口提交给分发器,然后分发器是不是直接把它转手就交给赵manager了啊,其实就是这样的一个提交流程啊,所以分发器是比较简单的,在有些架构里边呢啊,这个dispature有时候就就没有啊,所以这个也并不是特别的重要,它还有一个好处是什么呢?既然有rest的接口,它也就给我们提供了一个web UI啊,所以大家看我们在stand lo模式下肯定是有这个分发器的,我们的那个web UI就是他给我们提起来的。
10:25
啊,这个光这么分开说,大家可能还是有点就是还是有点迷惑吧,我们接下来还是结合具体的过程啊,看一下任务具体的提交流程是一个什么样的啊,具体来说其实就是这张图,大家看一看,我们提交一个任务的时候是做了一个什么事情呢?简单来讲就是我们的应用,呃,我们从客户端那里把这个整个的应用这个drive去提交,提交是提交给谁呢。通过呃,Rest接口提交给了dispatch,先提交给他,然后。
11:06
大家会看到啊,这个dispat是不是就直接把这个应用就交给了job manager啊啊对吧?啊,他就真正把这个job manager的那个GVM进程就提起来了,然后把这个应用交给他管理,接下来大家会看到剩下的事情几乎就跟这个dispa没什么关系了,是不是啊,对吧,他这里边就是相当于只是去接收我们那个客户端用户的那些操作请求的,呃,只是相当于是一这样一个媒介而已啊,那他提供了这个rest接口的话,大家就会想到它就可以跨平台对吧,而且可以这个呃,可以去通。直接穿过我们的防火墙,不用,呃考虑这个防火墙把我们这个请求给拦截的这些问题了,所以装manager拿到这个应用之后,接下来做的事情是什么呢?他的操作是向resource manager去申请资源啊,他发现我现在要有一个任务了,我有一个job要去执行了,我向resource manager我请求必要的资源去执行,因为我自己并不干活,我得我得要求你给我派几个兵来,对吧?啊,Resource manager那边去派兵,那resource manager拿到这个请求之后,他会干什么呢?他会把对应的task manager进程集起来,然后task manager是不是就要把自己空闲的那些slot就要在他那里做注册啊,啊,对吧,然后有了这些啊,空闲的这个slos已经知道之后,那么他就根据我们撞manager请求的那个数量,直接向task manager发出,好,这些slope就由你来提供了,你直接给我提供出来,我们当前的撞manager想要去征用,把你的手底下的那些兵都。
12:57
都给我提供出来要干活了,有了这些之后,Task manager就可以直接跟job manager去通信了啊,他们互相之间就有这个呃,心跳包的这个连接了。接下来大家会看到task manager向撞manager提供slots,然后呢,撞manager就可以给他manager分配要在slot里边执行的任务了。
13:23
最后在执行任务的过程当中,不同的task manager之间是不是还会有数据交换啊,啊就是这样,然后他就所有的任务都在这里去执行了。这就是我们整个任务提交的一个流程。啊,那大大家会看到就是说这其实是一个比较呃,比较高的一个层级去看这个flink任务提交流程了,呃,具体到我们一些应用的场合呢,当然stand alone模式基本上就是这样的啊,跟这个是大同小异差不多的,而如果要是部署的集群环境不一样,假如我们是用这个雅恩或者说是K8S去部署的话,那这个提交流程其实会有所不同,比方说我们这里举一个例子啊,假如是提交到部署到这个雅恩上的时候,那又会是一个什么样的流程呢?啊,大家看是这样。
14:16
首先我们有一个这个客户端对吧,客户端如果我们想要去提交一个job的时候,他首先应该要干什么事情呢。它首先是要先把JA包和配置要传到HDFS上,对,要把这个东西先传上去,然后大家就会想到是不是接下来我们那个job manager和task manager就可以啊,共享我们这里边的所有的这些东西了,对吧?啊,从这里边就可以直接拿到这些东西了啊,然后接下来他要做的是什么呢?向resource manager去提交job。然后resource manager,它直接去启动一些对application master,它启动container了,那所以这里的resource manager是什么呀?对,大家注意这是雅恩的资源管理器,就不是我们前面提到link里边的资源管理器了,对吧?啊,它这里边是已经集成在一起了,跟这个做了一些结合,而且大家会看到这里边是不是就已经没有。
15:22
Pat了啊,所以我们这里边也就没有那个比较好看的那个web UI了啊,他直接把那一步给跳过了,他直接就提交给雅安的resource manager了啊,所以雅安的resource manager接到请求之后呢,他先分配这个container资源,然后就把对应的这个note通知这个note manager,你给我去起一个什么呢?起一个application must把这个起起来。然后大家就会想到这个application master他要干什么,他是不是就得起重manager啊,他怎么去起呢?啊,它就从这个HDFS里边去加载啊,我们前面上传的那个抓包和配置对吧?啊,对应的把这个drop manager先起起来。
16:09
这是这样一个过程,然后job manager job manager提起来之后,他是不是就可以去分析我们当前的那个呃,作业图对吧?呃,得到那个执行图了,然后他就可以知道我们当前需要多少具体的SW资源,对不对?哎,他就再返回来去向resource manager申请资源,那么雅恩的resource manager得到这一个请求之后,他干什么事情呢?是不是叫继续分配container资源啊,对吧,把container先分配出来,然后去知啊他他是直接去通知这个application master所在的那个note manager。通知他去启动啊,去通知这个application master去启动更多的。
17:00
啊,Task manager,对,所以大家看他的这个过程是这样的一个过程,就是我这里边先知道要用多少资源,然后这个雅安的resource manager呢,把这个container资源先都分配好,然后具体这个container里边跑什么,哎,我再由这个application master去通知他,你要去起一个task manager对吧?啊,是这样的一个过程,稍微有点绕,但这个过程就相当于都被雅恩管理起来了,对吧?大家看在这个过程当中,其实我们flink整个的那些架构,它其实已经不要管理这些东信了,你就是直接起就好了,对吧,不要互相之间再去通信了啊,那当然了,这个container在起这个test manager的时候也会去从HDFS上去,呃,这个加载抓包配置对吧?啊,然后把这个test manager起起来,提起来之后,他就可以向job manager去发送心跳包,接下来就可以等待job manager给他分配任务。发送任。啊,这就是这个雅恩模式下,整个这个任务提交的一个流程。
18:06
啊,大家觉得这个有什么问题吗?呃,应该还还好对吧,这个其实还是比较顺的啊。刚才我们说的是一个任务的提交过程,就是把一个任务commit上去了,提交上去了,接下来是不是就应该有数据来了之后,要去对,要去执行,要去跑具体的这个任务了,那具体的这个任务调度的过程又是一个什么样的情形呢?哎,我们看一看这个flink里边任务调度的一个原理。呃,首先大家看一下,在这个架构里边,这里边是有一个job manager,然后有两个task manager,因为我们知道一般情况job manager做管理,做调度只有一个,对不对啊,而这个task manager干活的人有很多个,所以在做这个任务调度,做任务执行的过程当中,主要涉及到的东西,涉及到的组件就是他俩啊,这个像什么dispature啊,Resource manager啊,这些就在做这个任务执行过程当中就没什么用了,他们分配好就可以了啊,那这里边牵扯到一个什么东西呢?
19:10
大家看,这是我们写好的这个link程序代码。它首先应该要进行。啊,我们知道他肯定要先去做编译嘛,对吧,呃,做编译做做这个打包,然后它首先会生成一个初始的逻辑数据流图,也就是这里所谓的data flow graph,先生成一个这样一个东西。然后有了这个东西之后呢,就通过我们提交任务的那个客户端那个client就可以把它,呃提交给dispa也好,或者说提交给这个resource manager也好,最终是不是都要给到那个job manager啊啊给到job manager之后,那这一部分其实就基本上没什么用了,执行的过程就跟他也没什么关系了啊啊当然就是他还可以去发送一些,比方说我要取消这个drop啊,对吧,或者update的这个drop啊,或者是从我这个照片就可以收到一些他的那个返回的一些统计信息啊,这些是可以跟他去做交互的,但是任务的执行过程这这一部分就不做参与了。
20:13
那具体参与的其实就是John manager和task manager John manager拿到他传过来的那个代码和data flow之后,他会做什么呢?前面我们说过,他会把那个逻辑的数据流图是不是要去做一个转换啊,对吧,所以他会把这个东西转换成一个最后能够执行的一个execution graph执行图。所以他把这个做了转换之后,就可以把它发送给所有的task manager啊,然后就可以让task manager,这里每一个task manager是不是有task啊。然后就可以把对应的每一个task在slot上并发的去执行了。
21:03
这就是一个执行的过程。啊,当然在这个过程当中,Drop manager会去向task manager发一些指令,比如说哎,你去执行对吧,然后当然了,也可以去stop停止一个任务,也可以去取消一个任务啊,这都是job manager向test manager发的一些指令,除了这些之外呢,还可以去啊,去触发一个checkpoint的操作,对吧?啊,做一个快照,把我们当前的这个状态存下来,保存起来啊,这些都是job manager去做的,那task manager这边呢,主要其实就是跟job manager这边发送心跳包保持连接,然后如果有一些统计信息的返回,可以返回到这个job manager这里来。这就是整个这个任务调度的一个过程,在这个里边还涉及到很多具体的过程啊,大家可能会看到,那这里边这个task manager里边的slot,那这个到底又是怎么怎么处理,怎么去做的呢?对吧?呃,就是这个插槽到底是怎么做的呢?后面还有这个,呃,我们其实在那个we POI上已经看到过,就是它可以把不同的那个task这个到底怎么拆,然后它还可以合在一起,对不对,怎么拆,怎么合,这些到底是怎么做的呢?
22:18
然后我们还提到你前面的这个图又要变成这里边最后可执行的一个执行图,这个执行图又是什么样的一个状态呢?这里可能就会牵扯到很多很多具体的一些细节,下节课给大家再做具体介绍。
我来说两句