00:00
来给大家详细的讲解一下flink里的运行时架构啊,那这一部分内容呢,我们主要分成三大块儿,首先是给大家说一下flink里运行时的四大组件啊,就是前面其实有很多概念我们都已经提到过,现在再来给大家详细的说一下啊,把概念和它的功能再给大家列举一遍,然后后面呢,是要给大家讲一下任务提交的流程是什么样的啊,就是一个当前我们一个drop啊,这其实主要说的就是flink的drop drop要想提交到集群上面去。这里边我们的各大组件到底是互相之间怎么样交互,怎么样协同工作的呢?哎,这个要给大家说一下,然后提交上去之后呢?呃,那接下来是不是我就需要把这个任务做一个分配,开始要执行了,那这就涉及到任务调度的一些原理,就是我们前面提到的一个代码转化成我们可以执行的任务之后,到底有几个任务呢?那那么这些任务又到底需要有多少slot来执行呢?这都是跟任务调度相关。
01:02
所以接下来我们就分成这三部分做一个讲解,首先是运行时组件啊,这个运行时组件大家看就是四大组件,这里边有两个熟人啊,大家看主要就是。对,这里面这个job manager job manager。还有这个task manager,这两个大家非常熟悉啊,啊,这就是我们前面说的一个是当前job啊,负责管理整个作业的这样的一个角色啊,另外还有一个就是负责干活啊,那所以有时候翻译这个叫作业管理器,这个叫任务管理器,除了他俩之外呢,还有一个。啊,大家看到这个叫resource manager对吧?Resource manager这个名字也非常的明显,它就是资源管理器,主要用来调配资源。前面我们讲到的这个弗林集群里边,大家想到最主要的资源是什么?其实就是我们说所说的slot插槽对不对槽位啊,那所以这个result manager主要就是调配这东西啊,啊,然后另外还有一个叫dispatch,这个有时候翻译叫分发器,它呢所起的作用相对来讲就会小一点啊,所以接下来我们就分别再给大家说一说这个这四个组件到底干什么事儿啊,首先是job manager job manager大家要注意,它其实就是我们控制一个应用程序执行的。
02:23
主进程对吧?啊,所以它是以它为主啊,我们看那个配置文件里边也是它是master嘛,所以它是主进程,也就是说我们提交任何一个drop啊,这相当于就是一个flink的应用程序,对不对,这一个job它就应该是只有一个job manager来控制执行啊,啊当然有同学可能说,那如果要在高可用的情况下怎么样呢?啊,那当然高可用的情况下可能需要有多个啊,就有这个stand by对应的这个job manager对吧?啊,但是这些其实最终啊,我们在这个作业运行过程当中起到控制作用的只有一个,对不对啊,这还是啊,就是一个核心只能有一个嘛。
03:05
那么drop manager具体来讲做什么事呢?他就是要首先接收到我们要执行的应用程序,所以大家看我们那个提交drop drop啊,提交作业,最后是提交给谁了呢?是不是就是job manager啊,他是来管理drop的嘛哈,我们当然最后提交提交给他啊,那么他接收到的这个可以执行的应用程序包括哪些内容,大家看一下啊,包括当前的作业图,Job graph。逻辑数据流图就是logical data flow graph,以及打包了所有类库和其他资源的那个抓包,对吧,我们最后啊,打包好的那个东西都是要提交给他的啊,那这里面这个抓包好理解啊,那这个作业图和数据流图又是些什么东西呢?啊,这个后面我们可以再给大家详细讲解,现在我们大概知道就是什么呢?就是基于那个代码生成的那个dag对不对,你到底接下来要哪一步操作啊,到底干什么事儿,这其实就是我们这里边所谓的这个作业图。
04:05
然后接下来这个job manager要干一件事,就是他把这个job graph啊要做一个转换。转换成一个物理层面可以执行的数据流图,这个数据流图就被叫做执行图execution graph,那么这个执行图里边最大的一个区别就是包含了所有可以并发执行的任务,然后前后任务之间,彼此之间数据用什么样的方式去传递、传输,这都是定义好的。所以其实为什么这个叫执行图呢?就是你看到这个图,你就知道最后的这个任务到底怎么样去执行了。也就是说这个最后干活的那个人啊,呃,大家其实就想到这个图,他要他要他要给谁啊,要分给分给谁啊,对task manager干活的人一看到这个图,他照着图纸去做东西就行了,对吧?啊,所以就是这个图就是最终可执行的那个版本啊,那在提交作业的时候呢,还有一件事就是照manager除了跟task manager交互之外,还要跟resource manager资源管理器去做一个交互。
05:11
就他要去跟他申请资源,这里边我们所指的资源就是。Task manager上的插槽slot只要申请到了足够多的资源,那接下来是不是就可以把那个执行图分发给对应的task manager了,然后就可以执行了,对吧?这是这个在提交job啊,做任务调度的过程当中它的一个角色,另外job manager还起到在另外一个环节啊,起到了非常重要的功能,就是它要去协调检查点的操作,就是我们说隔一段时间是不是要做一个存盘呢?对吧?如果出现故障的时候,我要经呃从这个存盘的那个地方做一个恢复啊,那这个操作是由照manager来做协调的。后面我们会讲到啊,具体过程是什么呀。然后是task manager task manager就简单很多了,这里面主要的一个概念就是task是干活的人工作进程,那具体来讲,我们不是还有这个多线程吗?对吧?啊,那这个一个工作进程里面到底有多少,就是能同时运行几个线程呢?这是由它定义的那个插槽的数量来决定的,对吧?哎,所以每一个task manager都包含了一定数量的插槽,然后一个。
06:26
呃,Flink集群,或者说我们一个这个job可能需要有多个task manager来运行,对吧?啊,这这是task manager可以有多个job manager只能有一个,所以大家这里要注意的就是插槽的数量限制了,它能够执行的。并行任务的数量对吧,那就说这个最大的这个并行程度啊,这样一个多线程的程度,所以这里面有一个过程,就是说它其实启动之后是先得给那个resource manager资源管理器注册一下它的插槽。大家想想这是啥意思?
07:01
这就是我这里边有这些插槽可用,这是不是就是我们集群里边的可以分配的资源啊,啊,所以只要我有可用资源,我就先向resource manager那边去报告一下,报告我这边有这么多东西可以调用,所以接下来如果说一个job manager他想要用对应的这个资源的时候,他是不是找那个resource manager去看现在有多少可用啊,那resource manager那边不是可用都注册了吗?他自然能判断出来对不对,然后他就告诉这个job manager,好,我这边有可用的这个呃插槽,然后我告诉你这些插槽是在哪个task manager上,那接下来是不是JA manager就可以用了。就可以向这些task manager去分配任务了,对吧?啊,所以这其实就是这样的一个过程啊。那在具体的执行任务的过程当中,Task manager除了跟job manager去做一些交互啊,发送一些心跳信息,发送一些这个,呃,常规的比方说统计信息,其他的一些信息之外,那另外就是task manager之间。
08:03
他们是会交换数据的,大家想想这是为什么他们会交换数据。因为我们之前说过,在flink里边每一个任务就是不同阶段啊,就是按照我们那个Spark里面stage的观念来看,不同阶段每一个任务先后完成的任务是不是都应该分配到不同的这个呃插槽上,对吧?啊,分配到不同的这个节点上去做运行,那大家会想到我一个任务执行完了之后,是不是接下来这个数据就应该分发到下一个任务啊,那下一个任务是不是有可能是另外一个task manager,那所以互相之间大家就会发现,有时候分发的时候是跨slot,有时候是就要跨task manager,对不对,所以这个过程他们中间是有这个数据交互的啊,涉及到这个数据传输的一个过程。啊,这就是我们最重要的这两大组件,那另外还有就是resource manager,这个就比较简单了,它管理资源嘛,主要是管理谁呢?就是插槽就是slot对吧?啊,那大家看这个slot可以认为就是在flink里边我们定义出来的。
09:07
处理就是做这个计算处理的一个资源的单位对吧,一个单元最小的一个单元,那flink其实它的这个资源管理器啊,啊,可以和各种各样不同的环境啊,资源管理平台做一个集成对吧?啊,所以大家会看到我们做这个部署的时候,可以直接做这个STEM模式部署,这就跟别的没关系,就自己的那个result manager去去做处理就完事了,那另外呢,还可以啊,比方说这个雅安mes k8S对吧,有一些外部的这个资源管理平台去做交互。啊,所以整体来讲的话,它其实就是照搬者申请的时候。像这里的这个资源管理器去做一个申请啊,Flink的这个资源管理器做申请,那如果他有足够多的这个资源的话,就直接分配,没有的话怎么办。诶对,大家想到没有的话,如果是三模式的话,它是不是没得申请,就只能转圈圈了,等待对吧?啊,就只能等待释放,那如果说有对应的资源管理平台的话,他就进一步的向诶资源管理平台去做申请,对吧?啊,那雅安如果要是再给他有合适的这个节点资源再给他分配,那他可以起更多的task manager,接下来就可以跑更多的任务了。
10:23
这就是这个资源管理器的作用。呃,然后另外最后还有一个叫dispatch啊,我们把它翻译叫做分发器,它的主要的功能也非常简单,它主要就是为我们提交一个job,提交一个应用,提供了rest of rest of的这样的一个接口。啊,就是像我们的那个web UI啊,大家看我们在上面点点点那个东西到底是谁提供的呢?我们会看到它好像这个运行是运行在这个job manager上,对吧?啊但实际上这个东西它是dispatch这个组件来给我们提供的。啊,所以大家会发现它其实是这个架构里边可能也不是必须的,对吧?啊,这就看我们具体执行的时候啊,你到底在哪个平台用了什么样的架构,有时候可能dispaure就被整合掉了啊,就可能看不到了啊,所以它的作用其实就是一个接口嘛,你把那个应用提交上来之后,它直接就把这个job manager就就把这个作业啊,直接就转交给job manager了啊,所以它就是一个一个接口,一个桥梁的作用,这就是关于我们运行时的四大组件。
我来说两句