00:00
前面我们做了一个flink的快速上手,是实现了一个最为简单的word count案例,那在这个过程当中呢,我们就知道了怎么样去写一个flink程序,怎么样用它来做批处理,怎么样用它来做流处理,可以说我们现在就已经基本上知道flink怎么样去用了,那接下来呢,我们还要去深入了解一些link底层的处理架构,所以接下来我们要讲的是第三章flink的部署。其实这一部分啊,在之前我们写代码的时候,相信大家已经有所体会了,因为呢,我们说到啊,Flink这一段代码执行的过程很显然跟我们所熟悉的那种方式不一样,我们平常如果写一段Java或者scale拉代码的时候,我们写一个Java的测试类,或者说写一个SC拉的object啊,单立对象,那么在执行这个main函数的时候呢,很显然我们就是从上到下依次执行代码就完了嘛,执行完最后一句,很显然就应该返回退出了。
01:01
但是现在flink代码并不是这样,特别是最后我们测试的这个无界流,那体现的就特别的明显,因为我们这里边读取的是一个socket文本流嘛,所以当前我们去执行这段代码的时候,运行起来的时候呢,并不是直接运行完毕直接就退出输出结果退出了,甚至我们一开始会发现啊,什么结果都没有,一开始就相当于是有一个监听的程序挂在这里。这就是我们所说的流处理,是等待数据,数据来一个我们才去处理一个,所以如果从这个角度来看的话,前面我们定义的这些对数据的处理转换,其实并不是我们在这里直接运行程序的时候,执行到这一步,这个代码就执行了,这个处理操作就执行了,而是要等到。真正数据来了之后,才会执行我们这里的每一步操作,所以我们这个代码其实只是定义了一系列的操作流程啊,如果要打个比方的话,那可以比作一个流水生产线,哎,我们这里边呢,就是对产品的一个流水作业。
02:13
可能有这么多道工序,我们定义在不同的工位上,先把这个处理流程定义在这里,那是不是就直接开始执行了呢?并不是我们要等到诶,真正的产品来了之后,来一个再处理一个,前一步工序处理完了,那就传递到下一步工序继续进行,诶所以整体来看的话,所谓的流处理其实就是一个流水作业线。所以在flink里边呢,也对于这样的一个概念是有专门的定义的,把整个我们在程序里边定义好的这一系列操作,这个流水线就叫做drop,就叫做作业。那当然了,整个job里边应该包含了不同的操作,那这里边的每一步操作就单独叫做。
03:01
Task任务。所以我们可以认为啊,当前的一段flink代码其实就是定义了一个flink的drop,那么里边呢,每一步转换计算的这个操作,Flat map或者map,或者后面我们这个分组之后的聚合,都可以看作是一个flink上的task。诶,那这里边就又来了一个问题,就是我们当前相当于我们在这儿定义好这个代码之后直接运行,其实只是生成了对应的job和task而已。那我们具体执行又是在哪里执行呢?哎,这就涉及到我们之前一开始讲到的弗link的定位,它是一个大数据的流处理引擎,所以它处理的是大数据场景数据很多,哎,那我们说了,那就不能简简单单的就在本地执行一个单线程,很显然它是要有很多台机器构建一个集群去进行分布式处理。
04:03
所以呢,最终我们其实是相当于要把每一个task要执行的任务再做一个并行的拆分,并行的执行在不同的节点上,或者说执行在不同的线程上啊,接下来的话,我们就可以做大数据的并行处理了。所以呢,我们可以把这个过程可以分成两个部分,一部分就是把当前的作业任务都定义好,先生成出来,然后呢提交到当前我们对应的这个集群上。接下来呢,哎,集群上把对应的这个任务都分发好了之后,来了数据再去执行对应的任务,哎,这就涉及到了所谓的弗link的运行时架构,Flink提交作业和处理作业的流程。那关于flink的运行时架构呢,我们会在后边的第四章专门再去做讲解,现在呢,我们先来了解一下flink部署的一个基本的流程,我们先熟悉这个过程,后边再深入介绍原理。
05:04
不过在这一张呢,我们首先还是得有一些基本的概念啊,所以我们这里边可以先看一看这张图,这张图里边就涉及到了flink运行式架构里边的几个基本组件啊,首先我们看到啊,这里有一个flink client client就是所谓的客户端。它的作用呢,主要就是,哎,就相当于是我们先把当前的代码做一个打包转换,然后把它提交到flink集群上,那flink集群到底是一个什么样子呢?诶,那这里我们看到的啊,这些组件就都属于我们当前flink集群里边的一部分,它主要包含的就是两个角色,一个叫做。Job manager,另外一个叫做task manager。那顾名思义,Job manager主要处理的就是job,它是作业的管理者,或者叫作业的管理器,所以整体来讲呢,它是我们整个集群里边的领导者,它主要就是对我们整个作业进行中央调度管理,简单来说就是诶,当前我们这个代码生成的整个的流水作业线将会由job manager进行进一步的拆分分配,然后。
06:20
分派给不同的工作节点去进行运行啊,那所以谁是工作节点呢?就是这里的task manager,他们管理的是谁呢?管理的是每一个具体的task,我们之前说整个流水线上的每一个工位,每一个每一项工作就叫做task嘛,所以task manager呢,就是真正干活的人啊,有时候也就把它叫做worker。数据的处理都是由task manager来进行操作的,这就是整个当前flink运行时的一个基本架构。所以在这里呢,关键点就在于客户端client将会把我们当前的代码。
07:02
转换成真正可以执行的作业,然后把作业提交给job manager,然后job manager呢啊,根据当前已有的一些资源进行作业任务的分配,然后把具体要干的活分配给所有的task manager,接下来就可以进行任务的执行了,这就是整个的过程啊,那对于弗link而言呢,它是一个非常灵活的框架啊,它是支持各种各样不同的部署场景的。而且呢,它还可以跟各种不同的资源管理平台进行集成,比如说我们所熟悉的雅恩。还有K8S。哎,那当然了,后边我们都会讲到对应的这些不同的部署方式,所以接下来呢,我们就会对具体的部署场景来进行基本的介绍。
我来说两句