00:00
大家好,我们本次课程呢,是结合源码对弗NK的内核进行一个详细的介绍和讲解,那么众所周知,最近几年呢,Flink发展势头是十分的迅猛的,特别是大数据实施计算领域,它的占比也是越来越高的,那它的重要性也是越来越重要的。那么特别是国内的一些大公司,大企业啊,对link也是极力的推广。那么我们上硅谷之前,针对link推出了拉和JAVA2种版本的课程。呃,那么这一次的课程呢,呃,主要呢,是结合源码对核心模块进行一个详细的讲解,那针对的版本主要是一个1.12.0啊,是比较新的一个框架。那咱们分的讲解内容主要有四大块,第一块提交任务的提交流程。第二一块组件之间的通信,第三一块登录调度。
01:00
呃,第四一块它的内存管理,那么我们学习一个框架呀,肯定要基本了解它底层啊,整个的一个工作机制,工作原理,那就是咱们这边任务提交流程,那我们这边讲解会。非常的详细,会以什么呢?以咱们命令行。命令行的提交命令。执行开始啊,就是咱们在命令上输入flink run啊,提交一个加包去执行,从这里入手,一步步的结合源码去。追踪它的执行过程,那大概呢,我们这边我梳理了有20几个步骤。20几个步骤涉及呢,可能有几十个类啊,几十个类。跳转呢,那就也是上百次。那么涉及的代码量呢,也有数千。首先啊,那么大家呢,呃,也不要担心,这个量比较多,在关键源码部分我会加上注释啊。
02:06
这样方便大家去学习和理解。那大概呢,这个会花很多的时间来讲啊,大概分为16个小节。那这一块呢,大家也不可能大家一听到这个对吧,呃,这么多行代码,这么多个跳转,他可能担心记不住,那也不用担心,咱们最终啊会画一张PPT的动图。把核心关键的步骤给大家梳理清楚啊,一步一步怎么执行对吧,那么大家最后呢,如果能够把这张图给记下来,那我觉得啊,也就达到咱们学习的一个目的了啊,也是不用太担心,咱们会做一个总结啊,更加形象的来看。那第二块组件通信,那flink组件之间的通信是基于阿卡的,所以咱们这边首先呢,可以介绍一些前置的概念,Get模型,还有打卡的。
03:01
基本原理。还有,还有它的实现。那么介绍完之后呢,咱们会结合源码来讲讲flink基于阿卡是怎么实现的它的RPC框架。特别是对他RPC框架里面涉及到的五大关键角色。进行重点介绍,那么我们会详细的介绍和对比,同时呢,也会看一下它的源码啊,它是怎么一个构成。那我们要彻底搞清他们之间的关系,还有他们交互的一个过程,那这中间呢,他这边设计的时候涉及到一个代理啊,就代理转发,那这一块呢,我们也会重点对其他们中间呢。代理转发。还有他这个代理处理的一个细节进行一个深入的讲解。可以说啊,咱们讲的已经是算是非常非常透彻的这一块,那么最终呢,大家也不用担心啊,同样的我也会做一个PPT动图,那么大家结合这张图就充分。
04:06
更加清晰明白感受到他们五大观念角色之间如何进行通信,如何进行交互。那第三一块的任务调度这一块呢。做到link的任务调度,呃,那我们如果之前对flink有一定的学习,有一定了解,那我们应该知道它是不是有几张图啊。什么图啊,是不是有一个流图,还有作业图,还有。行图对吧,核心是直行图,还有一个物理执行图。那么说到这个图。那Spark是不是也有图啊,它是不是有个dag有向无环图对吧?那么它底层呢,也是有呃,生成逻辑也是需要从源码源码去分析的,那咱们这一边呢,对弗link特有的这四张图啊,也会进行详细的讲解。不,不仅仅是停留在简单的理论层面。那我们会对他们。
05:03
怎么调用的,哎,调用位置,也就是说在源码里面执行到哪一个步骤的时候,它开始生成,这个是大家要搞明白,也会也会给大家进行一个讲解,另外一个重点呢,就是它如何转换和生成的,那这中间就涉及到这张图是怎么构造出来的,再怎么一步步进行转换的这一块呢,咱们是呃深入的去看源码的。那么另外这一块呢?他们还会讲一下task调度的过程中。它涉及到的几个。重要的概念,需要组建调度器,调度策略,还有调度模式啊。那么弗林格关于这三个重要的一个概念呢,咱们也会讲解和介绍,特别呢,这边大家注意不同版本,他们每一个可能有一些区别,我们也会去强调啊,提醒大家。
06:01
那么最终呢,他们也不会仅仅说就这么点内容,对吧?啊,咱们还会做什么呢?还会对task调度之后的执行是吧?比如说咱们task被调度到工作节点,那之后它是怎么运行起来的?这一块呢,咱们也会进行讲解,也是结合源码,那我们会会以一个算子为例,以map算子为例,把它的一个执行过程详细的给大家展现出来。那么从中呢,其实我们也可以直观的感受到flink所谓的分层API啊,所以到时候大家去学习的时候就能体会到了,那么还有一块呢,是一个内存管理啊内存管理,那内存管理这一块呢,咱们主要介绍啥呢?Flink在1.10之后的内存管理模型。他在1.10之后,对于内存模型做了一个重大的改进,那我们会分别结合job manager跟task manager进行讲解和介绍,呃,你也会画一张图。
07:07
让大家直观感受到他在内存上面是如何进行管理的,呃,并且也会介绍一下它这种模型如何有效避免。JVM内存管理的一个不足。让大家充分感受到他这么设计的能够达到的效果和目的。那么我们也会结合源码分析它的分配库。内存分配过程啊,分配过程。另外额外呢,我们也会对它内存管理方面的几个重要概念进行介绍,比如说呀,它里面涉及到的数据结构,还有它里面的一些特有的组件,内存管理器,还有一块呢,就是在网络传输里边内存管理。是怎么来实现的,那么我,呃,至于这个网络传输中的内存管理啊。
08:03
这边呃,提个醒。是什么呢?咱们组件之间通信flink啊,它是基于阿卡的,对吧,那我们数据传输也涉及到一个通信的问题,因为你想想咱们是分布式的,在不同节点,那可能数据需要从某个节点传输到另一个节点。那这中间就得涉及到通信了,它是基于net啊,这是一个呃,大家要注意的一个小细节,那这个中间呢,我们就是对于网络传输,它的这个内存管理啊做一个介绍,顺带呢,会对它的反压过程也会做一个讲解啊反压。咱们本次课程啊。基于flink的源码是进入一个深入的讲解,那么可能涉及到数千行代码,那么还有数百字的跳转,那我们带领大家呢。
09:00
就去深入了解它的核心部分,不再是服务于表面,那么我们目前呢,你去网上去找,那目前也只有咱们这个课程啊,算是一个首发,能够系统的分模块的详细的对源码进行一个介绍和讲解。那么。从中呢,其实大家也希望能够帮助到大家通过这么一个源码的学习过程。让大家学会如何去。掌握和学习一个新的框架,陌生的框架啊,一些学习技巧,也希望大家有所提升,有所收获,另外呢,就是咱们介绍几个核心内容,都会有详细的过程,还有总结性的图啊,所以大家呢,呃,也不用太担心说不好接受啊。那接下来我们来看一下本次课程涉及到的资料。那这边主要有两个文件夹,第一块呢,是咱们上课的一些笔记。课件,那么第二块是资料,那这个笔记呢,啊,就是这么一个,那这个东西呢。
10:05
咱们也是按照刚才介绍的模块来规划的,那么每一步的过程都写的非常的详细,包括咱们说的那些总结性的图都在里面啊,都在里面。那么第二块呢,它是什么呢?是一个资料,资料这一块呢,主要是源码,首先呢是有这个,这个是官网下载的没有任何修改的一个源码,那么另外一个呢,是我咱们结合讲课过程中啊,一些关键代码加了一些注释啊,我也把给他打了个包。那这中间也没有对源码的逻辑做修改,仅仅是加了一些关键注释,那么大家学习的时候也可以主要参考这个带注释的源码,那这样呢,大家会更学习更方便,更方便更高效一点,更好理解一点。
我来说两句