00:00
那关于我们去读取户地表的方式呢?这边有一个非常呃重要的一个叫流毒,还记得前面咱们在演示一个流式插入的时候,当时我们说诶,我们那个sources t,呃,它是源源不断生成数据的,我们查询它插入的T1T几来着,T2吧,对吧,当时是T2,呃,它是源源不断的,它是无界的,他一直在插,但是当时我们s selectt查了一下T2是不是只获得了那个固定的98条结果,因为我们说默认是什么?默认是snap shot,也就是快照读取,也就是全量最新,在我们查询的那一时刻,它的全量最新直接一次性返回给你,那后面的变化咱们就拿不到了,对吧?但是如果我们想要实现一个实时的一个流逝的场景,我是不是写是流逝的写,我也希望我读是刘氏的读,能够实时读到变化。是吧,哎,那这个时候我们就可以开启这个流毒的功能啊,那我对吧,啊,默认是快照读取嘛,啊,取得全量最新一次返回来我们,嗯。
01:07
我先那个table里那个东西。先开一下啊,我们现在是不是还没开啊。好,我先把现在其他无关紧要任务都停了啊啊,现在都没有对吧?啊,那么大家注意呃,先看一下区别啊,银色影度T2呃。From s。T,对吧,那这个插入作业是不是会一直在执行啊,咱们一会看这里它是不是一直在执行,但是我们去查的时候啊,Select新from t2我让他跑一小会儿,让他40米啊,让他十秒。好了开始了,但现在数据应该也开始源源不断的生成,还有插入了,呃,但是我们这个时候一查。
02:06
嗯。查询的话,在这里会提交一个client任务啊,那么大家一会可以看到任务就finish了啊,就结束了,因为他把全量最新诶你看finish了。他把全量最新返回给你了,就没了啊,对吧啊,但是现在有2000多条了,对吧,就没了,就停了啊。没法实时的读,实时读一直在读取的那种啊呃,那接下来留读我们怎么开呢啊,我把这个停掉啊。那流毒其实就是几个参数啊。哎。诶,跑哪去了,跑这了啊,流读其实就最重要的是这个参数啊,Read streaming in默认是false表示关闭,那就是快照读取,那如果我们把它设为处啊,不是这是非必须啊,默认值是什么?False,我们设置为处,就能开启一个流毒的效果了。
03:06
啊,流毒的效果,那么我们可以流毒开启之后还有一些参数啊,第一个我们可以什么呢?指定啊,从哪个地方开始流逝的读,因为我们这个从我们这个护体表是不是有一个胎line对吧?啊里面每一个时刻,历史时刻都有记录的对吧?啊有一一个一个的instant,那么如果默认不去指定开始的时候啊,那就是从你查询的那一那一刻开始,从最新的开始实时的读取,实时读取,那如果你指定的start commit,那就比如说你你是从这个地方指定的这里,那就从这开始往后啊,实时的读取,流逝的读取,也就是说中间这些都会经过啊,还有最新的,那我们指定的时候是按照时间戳啊,就一串数字,分别是年月日,十分秒啊。
04:00
那还有一个是跳过compassion,这个非常重要啊,就是流毒的时候要不要跳过compassion的一个提交。你要是不跳过同学们啊,假设我现在有一二,呃123吧,啊二三,比如说在log文件里,这个在pack回的文件里,那一开始我是不是已经读到123了,那后面我用蓝色的表示,他们进行了compassion,生成了一个新的呃,Pack回。蓝色是表示comparison做的事啊,那这个时候如果你comparison不跳过,你是不是还会再读一遍123,那就出现了什么重复读取的问题。对吧。能理解这个意思啊,那我们往下看,避免阿语义下的重复消费啊,这个非常重要啊。如果不跳过,有小概率会重复消费啊,总会撞上这个时候啊,呃,另外一个,如果我们开启了后面要讲的一个。
05:03
Lo啊,就后面会提到啊呃。嗯。可能会有问题,但是呢,这个事儿呢。现在如果我们用的是新版本的who底,从零点一开始,以上两个问题已经通过保留compassion的instant time修复啊,也就是说默认情况下它是会帮我们处理啊。你用低版本的就得注意这个事儿了啊,注意这个事,好,接下来是retain commit啊,就是保留的commit这个,这是一个清理策略啊,是清理策略,也就是说cleanna清理器最多保留的历史提交数啊,大于这个数量就被清理掉了,呃,如果是圈体log模式,可以控制它的保留时间。为啥呢?比如说checkpoint周期五分钟一次,那你十次,呃,是不是就十次commit,十个周期就十个commit嘛啊,因为我们写入要依赖于呃check point,那十次乘以五分钟,那就相当于说可以保留50分钟时间啊。
06:14
好了。啊,这边有个注意,还是刚才那个事儿啊,啊刘毒可能会丢数啊,从零点一开始,那大家看一下啊,当我跳过打开并且呃读取的时候,消费落后于。就比我清理的这些还落后的时候,就可能丢数了。呃,从零点,因为已经被清掉了嘛,啊,已经清掉了。就是说嗯,比如说我保留了十次,但是我读的时候是读往前的第十十五次吧,从这边开始读了啊,但是呢,这边已经没有了,那不就丢书了。啊,从零点一开始,呃,Compassion不会再变更record的,什么instant time也就compassion,你归compassion,但是你这个time不更新了啊,因此理论上数据不会再重复了。
07:09
但是是结果不重复,你读读的时候还是会重复读到,但是它会做一个处理去重操作啊。所以这个参数还是开为好啊,还是开为好啊,无所谓了,行,那接下来我们就快速的试验一下啊,我们还是建一张相同的表结构,呃,那partition就不要了吧,啊,没必要啊,那接下来呢,我们用一张叫T5MO2表,我们开启一个流毒,然后是呃,这边这个参数是什么意思呢?Check interval,就是它流毒是怎么实现的,它其实就周期性的去监听你固体表的变化。也就是说我举个例子啊,如果我这边设置为一个小时,即使你开了流毒,我也是一个小时才去拉一次数据去看一时再把新增的拉过来啊,一个小时才去看一次,对吧?啊,它并不是说哎,我我这个互利表已经有数据源源不断的写进去了,但是我读的时候,我还是一个小时去拿一次,一个小时去拿一次啊这样子,所以这个间隔也很重要,会影响咱们的延迟,对不对啊,会影响延迟,这个默认是60秒。
08:24
啊,我这边写写一下吧,啊,这个啊,默认60秒啊。那完事之后呢,我们来试试吧,跟刚才这种效果对比啊。这这句话我得先删掉啊。好,创建一张T,呃,Insert show tables。那哦对了,还有一个事儿就是什么呢?咱们这个start commit不指定默认就是从什么从最新啊,从最新,那我快速的什么insert into。
09:11
呃。嗯。新from s。这就启动了一个插入任务对吧?啊插入到T5,然后呢,咱们这个时候查一下T5,看他的结果是不是实时变化,还是说一次性查回就返回给你了啊,我缩小一点。这个得等对吧,因为他写的时候有有有八分,另外呢,还要依赖于check po。那我这个后面是三秒,诶,你看这个时候它是占用着的,你看没有直接退出了啊,你看又变了对吧,又动了。再等一会儿。哎,你看又刷了,这个就是流毒。啊,这个就是六度啊,这几个参数都有关系啊,也就是说你的check point间隔,你的compassion,呃,你的check interval,也就这个这个check interval。
10:10
啊,都会影响咱们的读取延迟啊,都会影响。好,这个就是流毒啊。那除了流毒呢,咱们弗林也是支持增量读取的,在Spark集成的时候咱们也试过了,其实就指定一个begin。然后呢,可以指定一个end对吧?啊,那你指定一个begin从哪开始就可以了,End不指定就表示一直到一直读啊。那我们既然有流毒,还需要增量读取吗?啊,其实也也一样的,你看它这个参数啊,我们流毒的时候是不是有一个start commit,那这个增量读取其实就是指定start commit。也可以指定end对吧,有start就肯定有end啊呃,那在流毒的时候啊,我们可以通过start指定起始消费位置啊,从哪开始呗,对吧?好,那BA呢,是一个增量的消费的话,我们也是指定起始的。
11:12
但是be的话,你肯定要指定一个什么结束的时候啊。那这个其实刚才已经,呃。看过了啊,这个就是一个简单的增量读取。就是这个参数,这两个参数来控制。除此之外呢,还有一个生产商特别好用啊,就限流啊,是这么一个场景啊,那如果我们将一个全量的数据,也就是说我们首次上线的时候啊,我们要将历史的存量数据,比如说特别大达到百亿级了,我们要先同步到卡普卡去。之后呢,再通过flink流逝消费卡夫卡,再写入湖底啊,再写入who底在flink。啊克啊。那如果这个时候你你一下子他是不是就flink立马就反压了,就打打也很可能就打爆了,对不对啊,因为这个时候全量数据啊,它量大呀,乱序严重啊对吧?啊导入写入性能退化各种问题,那弗link最直观的表现就是直接就反压了呗。
12:19
对吧,那这个时候我们如果能说诶,我们能控制一下,不要说大水漫灌,不要搞大水漫灌,可以我慢慢慢慢的抽行不行,慢慢慢慢的消费卡不卡的数据也不是慢慢的就是控制,稍微控制一下啊,不要一下子撑爆啊可以啊,咱们有个限流参数啊,也是写在位置里边,或者呃,你用hi去去指定也可以啊right rate limit默认是关的,默认值是零啊啊不是默认值是零表示关闭线啊,你可以调大。当然它限制的不是卡图卡,限制的是我们写入的护底啊,呃卡普卡啊,通过我们的flink写入一个护底,那比如说这里有11条一呃存量数据,现现在让你一下子消费一下子写啊。
13:14
那那那就完了,一下子就反压了,性能就严重受影响,这个时候你可以什么限制的是这个地方啊,这个地方比如说你限制为每秒钟10万条啊。每秒,那这么去写。那就可那就好了嘛,就不要不要太快啊,写入主要是调整的是这一块啊。他没法劝劝卡不卡这里啊,消费卡不卡,那这个也是要注意的一个点啊,这样能够提升咱们的作业的稳定性啊。避免一些吞吐的毛刺啊。
我来说两句