00:00
接下来我们要开启一个flink里边,深入flink底层,来给大家介绍一下运行时架构啊,那这一部分可能会涉及到一些更多的概念,大家呢,最好是要结合着我们之前讲到的部署运行以及代码里边实现的那些方式,结合起来看,可能理解会更加深刻一些啊,那这一部分主要就是先讲运行时的组件,然后后边呢,给大家讲一下任务提交的流程,再给大家讲一下任务调度的原理。那首先是运行时组件啊,组件其实主要就是四大块,四大组件其中有两个最主要的大家已经非常熟悉了,一个叫做job manager,另外一个叫做task manager,对吧?啊,有时候翻译过来的话,这个叫做作业管理器,这个就叫做任务管理器啊,那我们平常可能不会,呃,说那么拗口的,这个翻译的中文名称我们一般就直接叫英文就好啊,因为在本身源码里边,底层也是这么叫,就叫job manager和task manager。
01:01
那我们说job manager主要用来干什么呢?啊,它主要的任务其实就是控制每一个应用程序执行的那个主进程,对吧?那就是它主要是做这个任务的分配、调度、管理,以及后面我们提到就是要做这个check point,要去触发,我们当前这个存盘操作的时候,也是由job manager那边去出发去做调度的啊,所以它主要就是管理嘛,全局管理,然后它有一个非常重要的任务,就是要接收我们提交上来的,呃,当前的那个抓包,对吧?所有打包好的那些代码抓包,然后分析里边的处理流程,然后呢,生成一个最终可以执行的所谓的执行图,就像我们看到那个执行计划一样,那个东西就是照manager生成的,然后呢,诶,他就把这个作业真的分成每一个可以执行的部分啊,每一个执行的task分发给task manager,那task manager就是。
02:02
就干活了对吧?啊,这里边就是具体干活的人就是他,那后面还有两个概念,一个叫做resource manager resource manager顾名思义RM嘛,资源管理器,它主要是干什么呢?哎,那就是管理我们整个集群里边的资源,那我们集群里边的资源那到底又是什么东西呢?啊,前面我们看到了所谓的资源其实就是slot对吧?啊,所以这里面大家就发现了啊,这个task manager跟resource manager这里面就有关系了,诶它的这个关系主要体现在哪里呢?就是task manager,每一个task manager里边我会把自己的计算资源,我们这里边计算资源主要是什么?主要是内存和CPU嘛,对吧?那那这里边我划分的时候呢,CPU其实是没有办法去隔离的,所以对于task manager划分资源的时候,主要就是对于内存做一个隔离,隔离处理划分出一块来,每一部分就叫做一个slot啊,那所以大家可以认为slot就是task manager里面提供的一个最小化的资源单位。
03:08
那所以一开始我们启动集群的时候,是不是这个task manager就得向resource manager那边报告啊,对吧,报告诶我这边有三个呃,Slot对吧,我这边有五个slot,你先向那边注册一下,先通知一声,然后接下来资源管理器就可以统一管理了,统一做这个分配了,嗯,那那接下来还会跟谁去做去做交互呢?跟job manager去做交互,对吧?大家会想到job manager前面我们不是说他可以去分析我们的那个代码,然后生成那个执行计划图吗?它生成执行计划图之后,他就会知道我们当前到底有多少个任务,对吧?然后他就能分析出来到底需要多少个slot去执行,那接下来怎么办?向资源管理去去申请。啊,那资源管理器这这边就就就就就有不同的这个选择操作了,对吧,那大家能想到,那正常情况下肯定是我先看自己这里到底有多少个,如果够的话,诶我直接告诉John manager,好,这些我我我通知一下他manager啊,你现在你可用的那些slot就交给job manager用了,他给你分配任务,你干活吧,哎这样的话就分配好了,那或者说这里边如果资源不够的话。
04:22
那可能就有两种情况,一种就像我们前面stand alone模式下边它就一直转圈等待了,那最终当然就是超时报错退出。另外还有一种场景,就是它的上边呢,我们再去接一个资源管理平台,那是不是他还可以向资源管理管理平台再去申请新的资源啊啊所以呃,就是关于这个雅恩或者K8S这种模式呢,呃,这可能就涉及到他们不同的组件,它会有不同的这种交互的方法啊,大家主只主要是这个,知道这个整体的流程就可以了。啊,那所以资源resource manager啊,资源管理器主要就是管理slot slot就是我们运行的资源,运行任务的资源。
05:05
啊,另外还有一个不太常见的东西叫做分发器dispat,它主要是用来干什么呢?啊,它其实主要就是为我们提供那个restful接口,方便我们做应用的提交啊,这你提供了这个restful接口之后,那就相当于我们可以直接给一个HHTTP的访问接入点,可以不受防火墙的阻拦,对吧,直接就可以去做访问了,而且我们不是看到还有一个那个web UI吗?对吧,我们看到那个非常用的非常简洁清晰的那个网页提交的页面也是PA给我们提供的。啊,所以他的任务其实非常简单。呃,那这就是这样泛泛一说,后边我们这里边有详细的这个介绍啊,那这里边给大家就画几个重点吧,Job manager里边最重要的是干什么呢?他就是要首先接收到我们要执行的应用程序,然后大家注意啊,这里是重点,会把接收到的这个东西有一个叫做。
06:05
Drop graph一个作业图,就他接收到的这个东西就已经转换成这个东西了啊,然后当然还有对应的那些打包了,所有类的那个抓包对吧?啊,就代码打包成的那个抓包都有,然后呢,它会把这个job graph呢,转换成一个物理层面的数据流图,这个图叫做执行图。啊,这里边就是相当于所有可以并发执行的任务都在这个里边了,最后task manager要执行的任务就是这张图里边的一个小节点啊,这就是我们所说的,呃,看到的那个那个执行计划啊,其实就是这样,那然后在提交执行的这个过程当中呢,他会跟resource manager去做一些交互,对吧,他要去请求资源,那这个资源就是slot插槽啊。啊,那所以这里面大家主要是注意一下这个执行图啊,这个执行图后面我们还会给大家再展开去说。呃,这是job manager,然后后面还有task manager task manager里边我们只要知道他是干活的人,他是flink里边的工作进程啊,那一般情况下呢,我们一个集群肯定有多台task manager,然后每一台task manager都可以包含一个或多个不同数量的这个slots slot插槽,那这里面这个slot的数量呢,大家就注意啊,Task manager的个数乘以slot的数量。
07:26
每一个task manager的那个数量,对吧?总这就是整个集群里边能够提供的slot总数,然后这个总数这就代表什么呢?这就代表我们整个集群静态的并行计算的能力,对不对?就是我最大做这个任务的并行执行到底能并行到什么程度,这是我的一个静态能力,大家要跟后面我们讲的那个并行度要区分开。啊,那后边我们讲到这个resource manager,它主要就是管理插槽了,对吧?呃,就是它我们flink可以跟这个雅安K8S或者me啊,呃,就是提供不同的这种资源管理器跟他们去做交互,这个是完全可以的。
08:09
后边这个dispat它主要就是提供rest接口,然后启动一个web UI,对吧,那么它在架构里面可能就不是必须的了,如果说在有一些我们集成的资源管理平台的这种启动模式下,有可能dispa就已经就已经看不到了,对吧?就就已经给我们包起来了,那就没法访问了,这个也是有可能的啊,这是关于我们当前的flink当中的组件。
我来说两句