00:00
那咱们还是把。昨天所聊的内容呢,做一个快速的回顾啊,昨天呢,其实我们刚开始学的是这个加购。40秒。对吧,啊,这是相当于我们弗林斯克的第一个需求,也是一个入门的需求,确实它的难度并不大,对吧,里边的内容呢,我们之前有写过啊,其实他这个唯一的一个点我们就讲了,就是他的一个业务逻辑啊,就是在公司当中你能不能了解到这个事儿,对吧,就是我们当时说了,不光新增数据加购,不光有这个新增数据。像这个更新的数据。独立显卡。掉驱动了,不是不是不是。啊。你要知道他是打开这个软件就有问题,我不打开这个软件,其他的什么问题都没有。你懂吗?啊好,呃,是咱们入门一个需求,那在工作当中呢,你要发现除了这个新增的数据之外,如果说你们公司的业务是更新了这个数据。
01:11
对吧,然后呢,它可以更新什么呢?更新这个。加购的个数。他可以做这个事儿的话。那咱们更新的这种数据也是有我们需要的。对吧。啊,这个一定要注意一下啊,就在于这儿,但是有的公司当中呢,就像我们说的,可能他没有这种更改这样的一个操作。啊,他直接就是干什么事儿呢。直接就是再来一条数据。对吧,他再来一条啊,就这样的东西,它没有说在原本的基础上去修改,那这个就简单了,我们只要这个数据我都不用过滤啊,你要过滤的话,你就过滤一个银色的数据就够了,对吧?啊好,那在这里边呢,我们。就是做了一个入门需求,然后呢,关联了一个base DC这张表,对吧,通过circle直接去关联我们的。
02:03
为表。啊,直接去关联咱们的维表对吧,好做了一个维度退化,把这个贝斯DC这张码表呢,做了一个退化,啊,这是第一个需求入门的一个需求对吧,就是大家大家呢,写一写这个S,第二个需求呢,比第一个需求要。复杂一些,主要在于它这个表比较多,倒不是说这个需求本身有多复杂,其实它就是很简单的一个五张表的。关联操作。对吧。啊,那咱们呢,这张表其实大家可以看我我所写的跟文档当中呢,差距还是比较大的啊,你包括我们当时看PPT的时候,就应该知道我所写的代码跟这个有差距,对吧,因为当时我们在PPT里边在梳理这个图解的时候。用图的方式去分析这个需求的时候呢。咱们在PPT里边已经写了,就说诶关于这个订单表,可能我只需要这个什么。User ID province ID。
03:01
对吧,只需要这几个操作operator,然后呢,呃,类型all字段给保留下来。啊,然后呢,对于这个订单明细优惠券,我只需要一个优惠券的。ID。对吧,啊,然后呢,对于订单活动一样的啊,我并不需要那么多的数据,那我呢,是通过这个需求,我说带着大家自己写嘛,对吧,我呢就。相当于大家刚进公司,保留所有字段。对吧,我们采取的是保留所有字段的方式来做的这件事情。啊,那你刚进公司,你也要这样去处理啊,那这里边呢,我们又用到了这个left draw,你想订单与订单明细表,它是正常的一个关联,但是你与订单明细活动。还有这个订单明细优惠券。这个表进行关联的时候呢,很明显要用到left。
04:00
对吧,啊,关联字典表呢,倒无所谓,可以直接用这个join就行了。对吧,好呃,那既然我们用到level join,那最后这个流呢,肯定是一个撤回流了。啊,他会,呃,左边先来数据对吧,那先写一个左边右边数据为none的数据。写出去对吧,然后呢,右边数据。到了到了以后呢,他会把刚才那条数据给他撤回,然后再写一条新的数据过去。对吧,他这样的一个现象。那我们用传统的卡夫卡的连接器就不足以应对我们当前这个局面了,因为之前我们那个卡法连接器,它是不能写这个撤回流的,所以又给大家讲了一个新的东西,叫阿色的卡夫卡。它呢,可以往这个卡卡当中写这个撤回流的数据,当时我也说了,这个东西呢,它并不是真正的去撤回,他是怎么做的,大家还记得吗。就是阿斯的卡夫卡,他是怎么做这个事儿的?对于撤回流这件事儿,他是怎么做的?比如说我是一个左边连接对吧,我左边先来了一条数据,然后呢。
05:07
他正常写出吧。对吧,因为你左边单独来数据的时候,我不知道你右边会不会有数据,所以呢,我就正常的去写出。啊,好,那么。接下来右边来数据了呢,我要把刚才的数据撤回,再写一个新的数据,那写新的数据呢,这个操作肯定是一样的,对吧,我肯定要把这条数据再写出去,这个没毛病,但关键就在于撤回数据。他这个问题对吧,那撤回数据呢,他的已经写到卡夫卡了,其实你要知道他没办法去撤回了,对吧,把这个数据删了吗?不存在。对吧,啊,那么它呢,数据本身就是为囊值。这个要注意对吧,它的数据本身就是一个。浪值啊,数据本身就是一个浪值。对吧,它是这样的一种现象。
06:00
啊。OK吧,啊,这我们看到的啊,这个一定要注意,所以呢,我们对于这个流处理啊,流处理的时候,我们同时把那个消费者那值给他处理掉了,对吧,因为到了DWS层啊,咱们更多的用的还是这个DSTEM的一个操作,如果你用flink s其实还好,因为弗Li s呢,你是要获取这个数据的,对吧,那这个数据为nu,那肯定就。不会取出来啊,你就所以你就不用担心这个问题啊,关键在于流里边那数据为档呢,你照样能够获取到,然后你对这个nu值进行加工,它就会控制帧对吧,所以对于对对我们所写的那个代码。我们是把浪值给它处理了,对吧,我处理成了一个空块,处理成了一个空块。OK吧啊,咱们做点事情啊啊,那么这个到这个为止呢,我们订单预处理表也就搞定了,对吧,如果说呢,他看起来会比较复杂,因为嗯字段会相对来说比较多一些啊,如果说呃,大家呢,在写的时候,可能嗯就包括昨天我在写的时候一样的,对吧,有一些小的问题就是有时候可能像字符战役拼接多了吧。
07:10
就容易出现这种问题啊,但是你要你要看这个报错,你要能够快速的去解决这个问题才可以啊,对吧?啊呃,那么这里边呢,其实还有一个点,我们昨天忘了说了,我们要把这个东西补回来,什么东西呢?呃,那我们想啊。这个里边涉及到。硫与硫的join了。大家想是不想对吧,我们这里边涉及到流与流的照应的,但是流与流的照引呢,那我们知道它是可以放到状态里边,然后呢做这个。存储。所以他能够以。左边跟右边照应的一个范围对吧,一个范围的去关联这个数据的。啊,好,那么。我们那个状态默认存多久啊。
08:00
在flink circle的draw里边,咱们的这个状态默认是存多久的?大家还记得吗?我们之前给大家扩展这个知识点的时候聊过这个事儿,对吧。我们的状态是存多久的?对,默认值是零对吧,大家记得叫PT0S啊,我们当时打印过对吧,默认呢是。零啊,那就永久存储,那很明显不好不好对吧,因为我们订单订单明细对吧,呃,订单明细活动关联表加这个优惠券这些东西呢,很明显我们并不需要。一直存储,因为订单它都是有实效性的。对吧,啊,所以呢,这几张表啊,如果从下单的这个操作而言。
09:03
从下单的操作而言,那么他呢,应该是怎么样的。从下单操作而言呢,应该。是同时产生的,能理解吗?这四张表?如果我从下订单的这个操作来看,这四张表的数据是不是应该是同时产生的?对不对。有没有问题啊。没毛病吧?OK吧,啊,所以呢,我们这个时间应该怎么设置呢?如果说我想给这个状态设置一个。过期时间设置一个状态的ttr,我应该怎么设置呢?
10:02
大家告诉我,我应该怎么去设置呢?就是现在如果是你对吧,遇到这个需求,那这个状态你应该怎么去设置呢。设置为多久比较合适呢?嗯,那我告诉大家,你只考虑下订单就够了啊。你不用考虑,诶,那未来。我这个取消订单啊,这些事情啊,你要考虑这样也行对吧。考虑上这个东西就比较复杂了。考虑上你这个状态要保存很久对吧,比如说你一个订单周期。是从这个下单支付对吧,什么发货到货到账啊,从这些个流程去聊的话,那你这个周期就会很长,你特别像现在。
11:01
对吧,这个。疫情。你看可能我我我有一个快递。对吧,我在京东买一个东西,三月底下的订单。现在还没发货呢。你要考虑这个你就很复杂了,对吧,所以呢,我们只考虑下订单对吧,下单的这一课啊,那我们说了下单这个内容呢,这四张表是同时生成的。对吧,它是同时生成的。啊,那你告诉我。关于这个状态的ttr,我们应该怎么去?设计呢?应该设置为多少呢?应该根据什么来啊。啊。
12:00
班长,你说一下。你觉得应该设置为多少啊?就遇到这种问题对吧,你看你们是怎么去思考的,班长你觉得设置为多少我们的TTL我说了,从下单的角度来说。对吧,我们应该设置为多少比较合适呢?30分钟。为啥呀?为啥是十分钟?啊,翔总说十秒啊,班长说30分钟,那这个差距还是蛮大的,对吧啊。30分钟怎么考虑的?想走这个十秒又是怎么考虑的?能说一说吗?
13:01
30分钟不支付就没了。那我要是支付了呢。那我要是支付了呢。对吧,我要是在十分钟就支付了呢。你要注意啊,你说了30分钟不支付就没了,这个倒没有问题,它是一个。结束的状态对吧,他就是以后再也不会变了,这个订单数据,因为你是相当于超时订单。30分钟没支付,那不是超时订单吗?它是一个结束啊,那这个订单永远在不会被拿出来了,你你要想。买这个东西你得重新下订单,它是一个新的订单了。
14:02
对吧,啊好,那关键问题在于我支付了呢,你这个订单算结束吗?不算,你只是已支付状态,那还要已发货对吧,已到货,所以我当时说了这些东西不用考虑吗,班长。那不刚才白说了嘛,只考虑下单对吧,肖总说的十秒没问题啊,其实这个地方呢。既然我说了只从下订单的这个操作去考虑,那这四张表是几乎同时生成的,对吧,那我们状态的时间其实就考虑什么呢?考虑。网络延迟考虑你公司当中的一个。延迟。乱序。对吧,啊,那十秒钟这个是比较合理的,那其实就是设置为你公司当中最大的这个什么。乱序程度对吧,或者说你延迟。有多少?能理解吧,就是班长你考虑这个30分钟,你说30分钟不支付就没了,这个倒没问题,这句话没错啊,不是说你这句话说错了,但是你既然考虑到支付,那你不考虑其他的吗。
15:06
所以我当时说了,你要考虑支付的话,你不得考虑物流啊,配送到货对吧,然后呢,你你点了已签收。然后呢,到账。对不对,你不能考虑事情就考虑一点嘛,你这个30分钟肯定不行,对吧?啊,当时我还举个例子,如果疫情期间你要考虑这个事儿的话,那你疯了,你想想看,我三月底。我下的订单对吧,支付了我订单现在还没完成呢。因为现在他还没有给我送到,没有送到这个订单就没有结束。对吧,因为他订单状态还会再改。还会改对吧,这个订单就远远没有结束对吧,所以你不能这样,而且我还提示了,我说只考虑下单,只考虑下单对吧?好,那也就是说这里边呢,我们存个假如说相乘一呢,我们存个五秒钟,那你要知道实际上在生产环境当中,我们应该设置为生产环境当中的。
16:02
最大的。对吧,诶你看因为他们几乎是同时到的,我认为他就是同时到的,但是呢,你有可能有这个网络延迟,对吧,他有这个乱序啊等等这些情况,所以呢,你得给一点时间啊,那我们课堂上呢,给个五秒给个十秒就行了,对吧,那生长环境当中,你得把这个东西设置为你生长环境当中的。乱序程度或者延迟OK吧,啊,所以呢,我们把这个来加一下啊呃,在我们的这边。还是这个all pre process对吧?嗯,切到上面大家还记得在哪加吧,之前我们在写例子的时候都说过对吧,这边我们在这儿啊添加一个这个。时间啊,或者说我们放在最后吧。放在这个位置啊。1.3。呃,设置状态的。
17:01
体铁啊,你看今天就很卡对吧,大家应该能看的出来啊,我之前敲这个东西都不怎么卡,今天呢,就确实有一点卡啊这个东西。嗯,不过还好不是说顶级的卡对吧,Table因为比刚才那个冲击之前要要好一点了啊,只能说好一点啊,Get点。Set。然后呢,Duration对吧,它里面应该用的是duration吧,我看啊。按CTRLPCTRL。没问题啊。Duration of对吧,我们设置为这个五秒或十秒啊就行了,那这个呢,我们说一下生产环境啊生产。环境。设置为。这个最大。乱序程度。
18:04
能懂吧,啊,设置为最大的一个乱序程度就好了,因为我们只考虑这个下单,你要考虑所有状态,你这个东西呢,你得存好多天对吧,你碰到特殊情况。那你这个多少天你都说不准啊好,那咱们呢,这个就搞定了,这是我们昨天所学的内容,最后呢,差了一点这个东西对吧?啊咱们呢,就是也能够做这个工作,你放在生产环境当中也能做,但是你未来这个状态就会特别特别大。对吧,就会非常非常大,因为永远都不清楚嘛,对吧。
我来说两句