00:00
于flink的运行式架构,我们就基本上都介绍完了,这里边呢,还有一些扩展的知识可以给大家简单的说一下,就是关于我们这个任务调度,就是大家可能会发现在flink里边,它其实有很多这个默认的优化机制,比如说我们提到的算子链,Operator tree,比如说我们提到的这个任务槽的共享,对吧?也就这里面它是直接默认情况下就给我们做了这样的一个优化了,那我就是财大气粗,我我就喜欢像这个一字排胎这样的造型,至于说忙的忙死,闲的闲死,那你这个合并到一起之后,他就不忙了吗?那他只是利用率高一点对吧?我现在我就希望每一个任务都给它排开,然后都放在一个slot上去执行。就是专款专用这个任务就占用这一个slot,别的东西不能来抢,那行不行呢。啊,当然是可以的,或者说你像前面这个算子链啊,我们说符合这个条件,如果他们之间是一对一啊,One to one的这种数据传输关系,而且并行度又相同的话,我们可以直接把它合并在一起,串成一个算子链,那它符合这个条件,我也不想把它串起来,就想把它分开,然后塞到不同的这个slot里边行不行呢?
01:12
啊,也是可以的啊,这就涉及到这个任务调度的一些特殊的手段,Flink是给我们提供了这样的呃操作的,那这些操作是什么呢?就是一些特别的方法调用在代码里边啊,去直接可以去指定,比如说我们可以禁用算子链。什么意思呢啊,就是在某一个算子后边,我可以直接调一个disable training,大家可以看到在这个代码里面啊。比方说我们这个flat map后边我们现在是要禁用算子链,那就相当于什么呢?当前的这个flat map不能跟前后的任何一个任务去合并,算子链前面也不行,后面也不行,完全断开,它就是一个单独的任务。哎,这是一种方法,当然有同学说,那我这个有可能,我希望啊延边它可以合并。
02:02
后边能合并,这个我只断后边不断前边怎么办呢?啊,那可以我在下一步操作那里开启一个新的算子链啊,或者有同学说我只断前边不断后边可以吗?后边该该合并,继续合并,这可以吗?也是可以的,就是从当前算子开始,我要开启一个新的算子链。这个方法叫做start new啊,也就是说从目前这个flat map开始,开始一条新的流处里,你该怎么合并怎么合并,对吧?一条新的链那之前那就是不同的链了,完全要断开,中间不管是符合什么条件啊,都没用,都得断开。这就是两种不同的方式,那另外还有就是说自己不是有这个env吗?V不光能够设置全局的并行度,还能够全局的s operator training。或直接在全局当前这个代码里边,就把所有的算子链全全部禁用了,都不能去合并了啊,这也是可以的啊,这个就是给大家大概的说一下,就特殊情况下做这个任务调度,然后另外大家还想到就是我光把这个任务拆开,拆开没用啊,我是因为拆开之后它还可以那个共享嘛。
03:16
我是希望它专款专用,就是把它放在一个单独的slot上去执行,那怎么样禁止它使用这个slo共享呢?诶这个是在flink里边的方法是设置slo共享组,大家看有一个方法叫slot sharing group这里传参数那个string,比方说我给一个一。那表示什么呢?那就表示当前这个算子,它的slot共享组组别是一。啊,这啥意思?就是说在一个共享组里边的这些算子,他们才是可以共享slot的,不在一个共享组里边的算子,那当然就是必须分隔开,彼此之间必须隔离啊,那默认情况下为什么他们都可以共享呢?因为默认情况下他们都属于一个共享组,叫做default,叫做default的一个共享组。
04:10
如果不给的话,就都是,那假,假如说这里边我们给了这个flat map是共享组是一,那后边是不是跟他一组呢,就都得后面加这个slot sharing group1呢,其实不需要啊,就是只要你这里边设置了它是一,那么它之后的所有算子默认的组共享组都是当前这个一,就只要设置了一遍之后,后边只要不单独设置就都跟它一样,就都跟默认跟前面那个算子是同一个共享组。啊,这是关于净用算子链和设置slot共享组的这种方法啊,这是在做任务调度的时候,资源分配啊,特殊化管理的时候会用到的一些方法,但是一般情况大家不需要,因为默认的这这种操作,合并算子链和磁道共享就是基于资源调配的一种优化啊,大家只要使用这个默认的方法就可以了。
05:02
这个大家可以测一下啊,你如果改了当前的算子链合并规则之后,你就会发现他们断开的位置就不一样了,比方说你把这个呃,K aggregation,你如果禁用了算子链,那后边跟think它就又断开了,总共的任务也会变多,然后你如果加上了那个slo sharing group的话,那么它需要的资源就会更多啊,就不再仅仅是当前最大的那个并行度了,而应该是。所有组不同的共享组里边最大并行度之和啊,因为每个组都是单独占用slot嘛,所以每个组里边的那个最大的并行度再叠加起来就是我们最后需要的slot。
我来说两句