00:00
好,那接下来我们看一下弗Li s克,其实到弗link s克有一些东西呢,它不太好理解,但是我们之前就提到了弗Li s克里边,它并不像我们data stream data stream,像上午我们所讲的那个什么数据倾斜,对吧?这种问题如何去解决,那需要你在写代码的时候要注意一下。啊,怎么去写这个代码。对吧,啊,我们双重聚合应该怎么做,还要加上这个什么窗口时间,重新分组,重新分组的时候呢,带上窗口时间对吧?这就属于你自己的一个操作层面的事,而弗link s里边无非就是一些参数,我们设置一些参数,理解一下参数是干什么用的,然后到工作的时候,对吧?用到的时候呢,把参数一加搞定了。啊,这个就是我们弗Li circle,它相对来说比较简单的一个点,但是它里面有的东西呢,也不太好理解啊,但是由于我们上午也讲了一些东西,就还好了,那我们一个一个来看啊,首先它有哪些参数呢?这有一个官网地址对吧?C拿过来啊。
01:05
啊,那么在这个里面呢,是有很多的参数信息的,然后最后呢,这边也有一个介绍对吧?相对的也有它这个解释,而且每一个参数到底是硫用的还是P用的,哎,都有对吧?他都给你写了batch scheing啊有的呢,是两个都可以用的对吧?两个都可以用的,OK,这是整个的一个参数啊,但如果说你在工作的时候,你真的要用到flink circle或者table API,那这个呢,你你肯定要看一下里边所有的参数,对吧?有哪些东西有可能就会帮助到你优化这个circle,因为circle更多的是用参数来优化的,就跟have里边一样啊,有很多参数,每个参数呢,你要知道什么作用,其实就好了啊,它针对于里边呢,会做这个什么优化器,或者有些参数调大对吧,内存调大,那当然是优化了对吧,这个点啊,你要注意一下,好,那我们重点介绍这么几个啊,第一个。
02:04
这是什么呢啊,分组聚合。对吧,比方说按照部门ID求count或sum对吧?整个部门的薪资啊,整个部门有多少个人,或者说按照部门以及按照性别看一下每个部门男女各有多少人,类似于这样子的对吧?叫分组聚合啊,分组聚合,那分组聚合的时候呢?呃,容易产生一个问题叫这个。数据新型对吧?还记得我们上午分组聚合的时候遇到数据新型怎么做的,还记得吗?就这个KY之后直接聚合。是不是用状态把它存下来,用到一个叫local key buy的一个思想,对吧,Local k的一个思想,也就是说先做预聚合,那同理在S个里边呢,我们也可以这样,也可以这样,对吧,我们可以缓存VP啊,这个就直接开启叫mini batch。
03:09
Mini batch VP,对VP呢,可以叫mini batch,也可以叫这个,嗯,Micro batch对吧,都可以啊好,那原理呢,缓存一定数据的除法处理。啊,减少对date date的一个访问,为什么呢?因为你看啊,我们要按照部门求一个count或者some,那我新来一条数据,我是不是访问一下date这个状态信息,结合着写出去,又来一条数据,又访问一次写出去,对吧,而这个地方呢,我们可以统一的。缓存一批数据在这对吧,然后把状态拿过来,拿过来之后呢,跟我这一批数据做一个处理,然后把这个状态写出去啊,提高存储,减少这个数据的输出量,对吧,还是一样的,先做预聚合,还是这个思想。对吧,啊,还是这个思想啊,好,那这个地方呢,我们来看一下啊。
04:04
这里边儿我们要用的话也比较简单直接。开启mini batch对吧?嗯,那上午呢,我们说了,如果说我们要用聚合,我们要有两个条件,一个呢是条数,一个是时间。对吧,那一样的,首先在mini BA,我们要开启mini BA。要开启对吧,第二个要间隔时间,规定一个时间啊,另外还要规定一个什么条数啊,规定一个条数,因为嗯,如果只规定时间五秒钟,这个数据量特别大。对吧,数量特别大,你缓存在这也不太合适啊,你就可能内存溢出了。对吧,我我这一秒钟可能来5万条数据。对吧,五秒钟25万条数据,那太多了,对吧,所以根据两个条件,假如说五秒范围内,你到达2万,我也输出,防止这个OM,对吧?因为刚才我们说了mini match呢,它是把这个数据先放在内存当中,先存着,然后统一做计算,统一输出,不是来一条输出一条,来一条输出一条,对吧?啊是类似于这样子的一个操作,好这是我们所看到第一个啊叫mini,这个也比较好理解。
05:14
对吧,就本地先做这个处理啊啊,然后接下来呢,这边有一个点啊,又跟我们前面有冲突了,首先这种情况呢,只能在这个blink执行监管当中用啊,而且在一点二一点十二版本之前,它有bug,它有bug啊来看一下。我们看人家提的这个地方,最后在01:12解决了close关闭了对吧,Bug的提出,然后修复了啊,那这个呢,一点九一点11:11都有bug,这是什么呢?当我们开启了mini Bach这种优化之后,它不会过期时间啊,尽管尽管我们我们的什么这个状态TTL。
06:07
开启了对吧,我们设置了状态的TTL它不会过期这个状态。对吧,会有这个小的bug,这个呢,其实这也就是同学说是不是01:12之前我就不能用了,也不是,那如果说我真的是按照一个聚合组一个组去算,Com或者some。对吧,那在这个时候呢,我们的状态是不是压根就没想过要清啊。是不是大家想一下,假如我本来就是一直要做一个累加的我?你会清状态吗?也就是说什么意思呢?当我们这个数据里边,我压根就没打算去清状态。我压根就没打算清这个状态的时候,那我虽然用的是01:12之前的,那能不能用mini batch。
07:06
能不能用?可以的,对吧,因为它的bug是尽管我们设置了这个TDL,它不会删除,但是我们本身的任务就是不删除,那为什么不能用啊,对吧,你bug是不能删除对吧?删除不了,那我本身就不想删除啊,那也无所谓,你的bug对于我来说就不是bug了,对吧?这个没有问题的啊,这是第一个mini batch啊,攒一个小的批次统一做处理对吧?给我们解决数据倾斜,就是local key BA提供的一种可能性啊,提供的可能性啊,它可以攒一个批次,也就相当于把我们的流处理变成了VP处理了,因为呃,Spark swimming跟Li最大的一个区别就在于它的是这个触发机制不一样。
08:08
SPA swimming按时间出发的,而flink按照这个事件出发的,所以会导致他们俩吞吐量不一样,SPA swimming吞吐量要明显高于我们的flink啊,要明显高于flink啊,那是因为它是VP嘛,所以当我们flink s里边开启了这种VP操作,对吧?或者说在data加C美API当中,我们自己用状态来缓存这个数据,然后呢,一起做输出,也可以提高我们程序的吞吐。啊,也可以提高我们程序的温度,这是第一个啊叫mini batch比较简单对吧。
我来说两句