00:00
好,上午呢,我们是将这个数据新写以及反压这两块啊,是比较重要的一个东西给大家搞定了啊呃,那下午这两张呢,都还好了,第一个是卡法调优,上午就说了啊,卡法so调优呢,它并不是说做什么优化,只是说它有很多不同的写法,有一些特殊的东西需要给大家去介绍一下,对吧?呃,那另外就是弗Li s的调优。搜狗这个东西吧,由于它是从01:12这个版本才开始的,诶我那天说给他看那个没看着呢,对吧?啊,那看一下那天网速不行啊。嗯,我们对比一下,比方说这边呢,我打开这个文档。开。
01:04
一个文档啊好,他告诉我们不是最新版,这个无所谓啊呃,然后接下来呢,我们切到这个。这波一天一样的啊,这边过来。好12对吧,你要注意看上面的版本啊。我们就打开这个内容啊,那什么意思呢?十啊十我从十给大家看的,其实看11页就够了,十这个地方啊,Able API and soccer的一个首页写了什么东西。注意。对吧,啊,请注意为什么东西呢,他说一篇和这个circle啊,并没有完整完全的开发好,而且呢,正在。Activity就是正在积极的开发当中,并不是所有的操作都是被支持的,这个在我们这个当中,对吧,且呢,人家说了没有完全的开发好,所以在这个版本那11还保留着这句话,11看见没。
02:11
是吧,到了从12开始,大家发现那句话怎么样。没了啊,发现这句话没了,也就是说什么意思呢?呃,公司当中要用这个12。假如说他要用这个。12或者说用fli s吧,或者这样说啊,它工司当中大面积用flink s或者说table API的时候,那也是从这个12这个版本开始的,因为呃,公司当中你一定要注意,他看到这种东西的时候啊,他肯定不太敢用啊,但是有的公司敢于尝试嘛,那我我不能把话说死了,说一定没有公司在用啊,有公司用,但是绝对绝对很很少很少。对吧,因为人家官方都告诉你了,就在在于我们看click house文档一样,像那里边的二级索引,还有那个窗口函数,人家都写了,是这个实验性的,前面加了一个内容,对吧,你要用的时候呢,设置一个参数,把这个打开,就类似于这样子的啊,他并不保证这个东西完全正确啊,因为他也在开发当中,只是提供出来而已,所以这个12呢,也并没有出多久,对吧?啊,那你们进到公司当中,很有可能你们公司用的不是12,比12版本要低一点啊,比方说之前也提到过拼多多呢,他们还在用1.8呢。
03:29
啊,值11就出来就久了啊,他还在用一点吧,越大的场呢,可能这个用的呃更老一些,因为升级比较麻烦,涉及太多了,牵一发而动全身对吧?啊那呃,那有同学可能想了,那我们用也用了这个fli CDC,那我已经用了12版本啊,这个没关系,因为弗林CDC是11版本就出了。啊,你可以在面试的时候说你用的是11对吧,没用过这个弗Li so克,这个没关系,这个没关系,就是这个意思啊,就是说你公司当中很有可能目前来说呢,还用的是12版本,之前你去到公司也不是说会拿到这个table API或者link s做开发,而更多的时候呢,还是这个data stream做开发,就是这个意思,所以它的优化呢,呃,这块弗link s的优化,其实相对来说整个的优化当中肯定是最次要的啊,就是就是整个在优化当中算是次要的啊,所以说今天下午我们讲的东西呢,远远没有上午的重要啊,这是我们要讲的这个事情,OK吧,要理解这个事啊,啊,为什么它相对来说要差一些啊,好,这是我们所看到,那我们来说一下具体的一个点啊,第一个卡卡S的一个调优啊,第一个点呢,在于它可以配置一个参数之后呢可以。
04:52
或这个动态分区发现。形态的发现分区啊,那什么意思呢?比方说啊,现在他说正常的写代码啊,它默认是关掉的,默认是关掉的,那如果说是这样,呃,我之前是。
05:10
三个分区。对吧,我这前三个分区,然后呢,我起一个程序消费好,然后呢,我在运营过程当中发现这个不够,虽然不够对吧,是消费有延迟,没想到我加了一个分区,不好意思,这个时分林小程序。关注不到对吧,所以我们可以加一个这个参数啊,加一个参数就是它这个参数啊。在里边设置一下,它默认值呢是零。啊,默认值是零,零的话更是什么呢?呃,N区发现了一个什么间隔,Interval间隔的一个好表述。对吧,好,那dain是毫秒,那如果是零零的话,表示我不会去主动的发现卡夫卡的一个分区啊,那我们可以把这个值呢设置一下,哎,这个地方呢,比方说这个地方就是一个30秒。
06:06
对吧?啊,也就是说30秒,每隔30秒我去看一看有没有新的分区,每隔30秒我去看一看有没有新的分区,这样的话。我们在任务正常运营过程当中,假如说你加了一个分区。加了一个分区,不用停这个代码了,不用停代码直接运行可以对吧,是这个意思啊,而且对其他的分区不会有什么影响啊,并不会产生影响对吧?这是第一个叫动态发现分区,这个还好。对吧?啊,它并不是说什么调优不调优,只是说一种新的写法,第二个从数据源处获得这个world,那这个是什么意思呢?是这样子的啊,我们之前在提取wordmark的时候,找一个代码给大家看一下,演示一下啊。我看一下啊这个地方,嗯,DWS吧,因为DWS里边我们都是,诶不能找这个不大啊好,那这边呢,我们有很多的这个source,然后呢,根据source呢,创建了这个data stream对吧,然后我们以前经常写的时候呢,在这个后面去添加一个什么。
07:18
一般来说,我们经常这样去写吧,Sign time and what marks对吧,啊,这样去写啊,而实际上在我们的卡夫卡这个里边啊,啊这里边诶怎么写呢?比方说这是一个S吧。来比方说我们得到了一个source,卡夫卡的一个consumer啊,那对他可以直接写这个。可以在S这直接写,而不是说根据S这个流对吧?啊,当然这个呢,就是一种不同的写法而已,没有什么别的地方啊,没有说能个更优,这个无所谓,大家知道一下啊,这是呃第二个点,呃,数据源处生成what mark啊,因为以往呢,我们都是把这个流获取到之后呢,再根据去生成wordmark,而对于卡夫卡而言,我们直接卡夫卡的一个cons,也就是这个source方式,它可以直接提取时间戳,生成world a sign a sign of time step and worldmark,对吧?啊,这个是可以直接做到这个事情的,是这样的一个点啊好,那这两个呢,其实都还好,没没什么说调优的一个地方,对吧?啊,特别是第二个啊,它是一个不同的写法而已,呃,那么第三个点就属于调优了,而且不光,其实这个不光是卡夫卡,其他的仍然有效。
08:44
啊,仍然有效,呃,那么这个是干什么事的呢?比方说我们举一个例子,大家还记得,我问一下大家,大家还记得这个whatmark的一个传递吗?Water mark的一个传递问题吗?还记得吗?
09:03
关于word的一个传递,你还记得哪些点?大家可以来说一说啊。每个人说一点,我们来凑一凑关于what的一个传递。广播短板,木桶效应。多个边度大于之前的wordmark,往后传广播传递短板效应,被数据推着走,被数据推着走。
10:02
被数据推着走是什么意思?没有数据就没有whatmark?我只能这样理解,对吧?如果没有了数据,就不会有新的wordma,是这样吗?对吧,我我只能这样去理解一下啊,如果是这个意思呢,没问题啊好啊,那比方说这个里边四点三讲的是什么事啊,来我们注意看一下,举个例子啊,比方说我们的这个。我们的卡夫卡啊,这是卡夫卡的一个主题,这是一个主题一个topic啊,很明显这个topic怎么样,三个分区对吧,这个topic有三个分区,好,那有没有可能我们这边说了。消费者对吧,就是我们的卡夫卡S最好是三个分区,这是最优的对吧?好,假如我资源不够,那我一个分区啊,我只能给一个lo对吧,给你用那也可以啊,我资源充足,我能不能从S端我就指定四个平行度消费,可不可以我S设置并行度就为四,或者我全局的。
11:14
设置为四,我也不想改了,所有人都是四,可不可以?这个有没有问题,这个没问题吧,对吧,我就快速过了啊,然后接下来呢,既然你是四个边度,那必然有我们刚才说了有资源浪费,那怎么浪费呢?也就是说你第一消费这个呢,没有数据,对吧,这个是没有数据的,好,那接下来问题来了,比方说我在这个地方提取whatmark。就在source这个位置提取whatmark啊,或者说呢,我们是创建好这个理由之后,我们来提取这个worldmark,假如说在这我们来提取这个worldmark,对吧?好提取whatmark,那么它这个里边没有数据,呃,没有数据的时候,Whatmark一直是long的。
12:06
最小值幂对吧,让最小值me y6啊好,那下来下游也是四个,比方说我们做KBY做分组处理对吧?好那家下游四个的话,你这边做了K败,那所以说这个数据呢,将会是这样子的数据也好,Word b也好,都有可能某一个并行度传到下游的所有并行度里边。对吧?啊,这个是有可能的,那我们就随便画一画,这个就交叉的比较多了啊,那么价油大家刚才说了短板效应,所谓短板效应什么呢?这边每一个人呢,都维护着四个cos。不是不在啊,四个什么worldmark,然后呢,从四个当中比较取最小的作为当前任务的一个什么我的bug没有问题吧,好,那接下来呢,由于前面有一个变异路,消费不到数据,那怎么样。
13:10
它是不是传过来的永远都是浪的最小值,那这个里边会有新的数据吗?不会啊,那一直我玛都是解啊,Long的最小值是不是大家想一下,那一直都会是浪的最小值啊,也就是说后面的开窗计算压根就不会触发啊,压根就不会触发这个要注意一下啊啊,那应该说我去试一试,你不用试了,卡夫卡呢,如果说你用的是卡夫卡对吧,那这个没问题,卡夫卡呢,它自己,呃把这个参数相当于加上了,你不写它有默认值。卡普卡是做了这个事的啊,那你要是呢,只能拿其他的这个S去试了,对吧,是这样的一个东西啊,卡普卡呢,他自己加了,那这个呢,是可以记录一下,假如说有这种情况的一个source,对吧,他自己默认的没开,那你就可以开一下,叫所谓的空闲等待,什么意思呢?来如果数据源当中某一个分区或者分片在一段时间内没有发送事件。
14:13
啊,没有发送这个事件啊,那这个时候会发生什么现象呢?就是说我们说了你没有事件来,有同学说了吗,这个。我mark是被数据推着走的,那你没有数据了,那我wordmark也就没有了,那我mark就是停留在之前的数据,假如说我从开始就没有,就一直是log最小值,那么当下游的分区也会造成。一直没有数据对吧,由于这边说了下游算子波的mark计算方式取所有。同的上游并行度当中数据源的wordmark最小值,所以wordmark呢将不再更新,而这窗口定时器都不会被触发,因为没有wordmark。啊,没有我妈过来,而且结合着我们所说的对吧,第一个广播,第二个短板啊,短板效应,第三个有同学说被数据推着走,也就是说没有数据来了,也就不会往下游走了,广播对吧?短板取最小的,同时还有同学提到了,呃,多个比度要大于之前的,我马才会往下游传,对吧,你跟这些相等不行,必须要大于才可以啊,相等的不行,小于就更不用说了。
15:23
对吧,小于就更不用说了,所以结合大家所说的点,那我们就知道了,哎,下游的窗口这个内容呢,定时器并不会被触发。啊,它就不会被触发,所以在为了解决这个问题啊,风林当中呢,它加了一个空闲时间啊什么呢,在这儿加一个这个配置提取施件时间的时候,加一个超时时间。啊,过期时间加上过期时间啊,那这个过期时间呢,你可以给一个五分钟,也就是说当这个宾度当中,当然这五分钟啊,这是五分钟时间可能比较久,假如说我们是一分钟啊,举个例子,当这个并行度当中一分钟没有数据来的时候,那么下游在计算worldmark的时候,这个并行度不考虑了。
16:11
能懂这个意思吗?应该能,应该能理解吧。能不能理解?应该没问题吧,啊是这样的一个东西啊呃,那如果说大家要做测试,我告诉你怎么测啊,我告诉你怎么测这样啊,如果你想做测试的话,我这个不给大家测了啊呃,你搞两个边度啊,不是两个边度啊,你主题的分区topic,你搞两个分区,然后搞三个变度去消费,并音度为三去消费,然后这个呢,你设置个五分钟也行啊,五分钟可能太长了,你设置两分钟,你设置两分钟对吧,然后呢,你发送几条数据对吧?随便只要这个满足什么呢?两个并行度当中都有超过窗口时间,假如说你你你窗口啊是五秒。
17:13
窗口是五秒,你先发一个wordmark唯一的啊,就数据失件时间为一的,提取wordmark为一对吧,然后发发两个唯一的,然后再发两个十对吧,因为一的话它是零到五嘛。它是零到五的这个窗口,那再给个十对吧,给两个十你看啊,当时就是你第二个十输完的时候,他并不会立马就计算,他要等什么呢?等两分钟。等两分钟之后,你一直盯着那个控制台,它自己你没有输数据,它自己出来了。啊,他自己就跳出来这个数据了。对吧,因为这个地方呢,它自己设置的这个值啊,而你不加这个参数它也会出来,诶卡夫卡它默认加了一个参数的啊,卡夫卡是默认加了这个东西呢,所以说对于卡夫卡来说呢,嗯,从卡卡当中呢,我们知道一下,因为我们经常用的就卡夫卡,说卡夫卡多个分区嘛,对吧,所以要用多个变异度去消费这个数据啊,那实际上卡普卡他自己默认加了啊,所以也就不用关心了,你们可以测一下这个事情啊,这是空闲等待时间啊好,最后一个卡不卡的一个off赛的消费策略,这个呢,其实还好啊,呃,主要的点呢,就在于跟他要分开。
18:25
报auto ofset reset,我问一下大家这个属性我们之前是不是也聊过这个属性,大家记得它在什么时候会生效?我们之前写那个法的时候看到过呀。他在什么时候生效这个属性,生效的条件是什么?
19:00
嗯,这个参数它生效的条件是什么?这个参数配置的值不是a ladies吗?啊,新的消费者组。还有没有呢?其他同学呢,怎么理解的?哎,对了,有同学提到两种情况对吧?呃,第一个是新的消费者组。啊,一个是新的消费者组,第二个呢,当然你就算这个消费者组不是新的,以前消费过对吧,但是可能你之前保留的那个off已经在我集群当中不复存在了,对吧?啊,假如说我第一次消费到十了,十之后呢,挂掉了,我一直是个十一直保存在这对吧,好,那七天过去了。啊,因为七天过去了,七天过去了,数据要被删,我最小的可能是个1000。
20:03
最小的offset可能是个1000,我在启动对吧,我拿着这个去消费的时候,拿着十消费能找到吗?找不到对吧,也会生效,新的消费者组也会生效啊,这个要知道一下好呃,那接下来这个东西啊,后来我们聊的这个东西呢。比跟这个不一样。啊,跟这个不一样啊,凌驾于他之上的,比他级别要高,比他的级别要高,那我们看一下啊,你要知道一下就行了。嗯,也就是说不管消费者组了,跟消费者组没什么关系了,好好,那这边我们可以直接拿着consumer.set。Start from group of。4D小比这里默认的就是它从上一次。从上一次开始读取,对吧?那有可能没有上一次的,我新消费者组哪有上一次读取不到上一次offet信息,则会根据autoet reet来使用,对吧?这是默认的,就是它默认的就是这个,那除了这个消费策略之外还有什么呢?直接设置从list开始读,跟你之前消费者组有没有消费过没有任何关系,哪怕你已经有了off的信息,不好意思,我直接从头消费,那同理。
21:18
对吧,从最后面开始消费好,那还有。Specialet从指定位置啊,然后里边传一个map map的key呢,是一个topic这个类这个对象。他这个K是一个topic part啊,那value呢是一个浪值,就是说你也指定对吧,还有从这个时间戳,你想要从哪几点几分开始重新消费对吧,可以。啊,可以,那有同学经常就问到一些问题,就是说哎,我这挂的,我想从今天早上开始,凌晨开始运行,可不可以可以。指定这个指定一个参数对吧,可以啊,从这个地方开始重新运行,这是可以的啊好,那我们之后呢看一下。
22:10
当我们如果拆开方的开启的时候,我们重启从拆开方向的恢复,对吧,从拆恢复,如果能从拆方向恢恢复那。上面就没得聊了。对吧,我从check恢复啊,也就是上面几种策略呢,呃,刚开始第一次启动的时候没有这个checkpoint,不从checkpoint也不从cpoint恢复,没有问题,那我认为都是第一次启动,对吧?你可能把这个呃,消费的off保存到卡夫卡里边了,那这个我们可以忽略掉卡夫卡那个叫下划线,下划线consumer of的这个配置信息,但如果说我们从拆换的恢复,那你肯定要从拆恢复,那你要再设置它,那么就没用了,对吧,我们还做车换干嘛了,对吧?还有一个就是说,如果说我们要支持容错的。Consumer要开启这个check啊,要开启checkpoint,因为如果说checkpoint不开启啊,Checkpoint不开启的时候,我们之前是不是看到这个点来之前,我们在写这个工具类的时候啊。
23:15
麦卡YouTube这个地方呢,大家记得我们可以设置一个时间语义这个地方,你觉得我设置exactly有用吗?有没有用,大家想一下。就是我之前运行的那个代码,我这个地方设置了叫events有没有用。啊,班长直接就说了,没有用,对了,他没有用。他就跟我们写了一个那是一样的,对啊,跟我们写了一个那是一样的。对吧,开CK没有用啊,其实很简单,来,我们点进来啊。给大家看一下。我直接去搜这个。
24:06
这个语义我看在这里边给大家找一找啊。嗯。Producer。嗯,然后继续。看一下啊,这个地方。Kiss,这都是case对吧,发现啊,好,我们看一下它的一个重新赋值啊。Get index,不是啊。这个地方还不是啊,那我们找一下,它有一个地方呢,会告诉我们。就是说呃,什么意思啊,如他会去做判断啊,如果说我们的checkpoint没开,他就把这个值呢,重新赋一个值啊,重新附一个值,我们看一下啊satic对吧,我我搜这个啊,我搜一下。
25:09
这是kiss,这是吊唁,这个不用管,对吧,Switch啊。然后这个。我们看一下他,给他重新赋值就好了。好,那这个啊来看。就这个这块啊啊,初始化状态,初始化代码一般走在前面对吧,好,那我们看啊这个地方,它告诉我们说这个seme等于none的时候。等于呢?对吧,好,也就是其他的,你设置了其他的一致性语义啊,然后呢,看这边and取反了什么东西呢,来看啊说。this.get current time.it check enable。
26:01
好,那正常来说,它开启了处。对吧,啊,那这边只反false,这个是false,它反才是什么,才是true对吧?AND2个都为处,那看啊,也就是说当你时间语义不是呢,你不是呢,比方说我们设置的是exactly once,对吧,这是第一个,第二当我们是exactly,同时我们checkpoint没有开启,注意这个地方取反了啊,对吧,取反了那就是这个地方是false,它才会为true,对吧,当没有开启,也就是说总结一句话,就当年我们这种情况,我指定了exactly advance,但是check方我并没有真正的开启,对吧,我只把代码注释掉了,那没有开,那来看他把这个一致性羽义同心同质为了谁啊那。因为没有意义啊,你不开check报应的哪做到精准一次性啊,不可能的,对不对啊,所以这个要注意一下啊,我们这个写的也是白写,他他他跟写的是那是没什么区别的,对吧,就是你checkpoint不开,你这写什么都一样,都是跟的。
27:10
对吧,啊,所以刚才我们说了,如果你要。去做这个容错的这种方式,对吧,那必须要开启这个checkpoint啊,必须要开启checkpoint,这个呢大家也都知道,只不过说我们从源码的角度给大家找一下,对吧?啊确实是这样的,如果说你这个车方也没开,他把你那个一致性语义改为了什么,改为了钠啊,就跟没写是一样的啊行,那这个呢,我们解一下。
我来说两句