00:00
好,那接下来呢,到咱们的这个实时数仓啊,那第一个问题呢,我们就聊一它的这个分层啊,那实时数仓的分层我们得先搞定这个问题对吧,因为我们都是已经有了这个零验收单的基础了,好好呃,那我们来聊一下它的一个分层。啊聊一下它的分层,首先呢,我们还是分这个五层,这个没问题对吧?啊,我们把这五层先写上啊第一个ods对吧。第二,第二。然后DWDDWS啊,然后呢,还有一个ADS。对吧,咱们把这个内容呢先写上,接下来我们要讨论那么这些东西的一个存储。啊加计算我们用什么框架。啊,那计算不用说了吧。计算用什么框架呀。这个还用多聊吗?计算的框架就是层一层,中间就是我要把ods数据拿出来做计算,然后写到DM或者说DWD,对吧,然后再从DWD或者DM把数据拿到,然后呢,通过计算写到DWS啊,那这个中间的计算过程,咱们所采用的框架。
01:19
是什么告诉我?这个肯定不成问题啊,对于大家来说对吧,用什么。动手动手啊,敲一炸弹木,别别觉得这个问题很简单对吧?啊,咱们动起来对吧?问目的是让什么呢?让大家能够动起来啊,不至于犯困。OK吧,尽量的都去敲一敲,我知道大家说,哎,那这个问题还问对吧?那你想想看,简单的问题你不愿意答,难的问题你不会答。那,那你答什么呢?那你不就是一天到晚在这干坐着。是不是?对吧,干坐着,然后做着做着就开始小鸡啄米了,那肯定不行,对吧?所以动起来啊,简单问题呢,也要答一答啊,难的问题呢,可以说一说自己的思路,OK吧,啊,是这样子的。
02:09
好,那中间的计算呢,我们肯定用的是什么计算框架啊,这个我们先确定一下用的是flink。对吧,好,那么接下来呢,就是我们聊的这个存储了。对吧,你看在我们林业收仓呢,是用的亥。啊,它基于HDF做存储的,基于Spark做计算的,当然它用的是Spark。对吧,相当于离线计算啊。嗯,那这边呢,我们计端框架用的Li,这个没有问题啊,关键的存储呢,我们应该用什么。那你说是书仓里边存储框架,它得满足一个什么特点呢。对吧,我们得从这个角度来想,我们呢,中间。
03:01
这个中间都是弗Li格啊,这个中间都是弗Li对吧,也就是说我们得取这个数据,然后呢,用弗Li加工一下写到这儿,然后呢,再用弗Li加工写到这再加工,再加工一层一层的,这中间的。对吧,我们想的都是这个link。对吧,你想的都是分好,那我们用什么。呃,大家说的这个卡夫卡对吧,然后牛总补充了说快准确啊,那这里边儿很明显,咱们的存储框架呢,要满足一个什么样的条件。计算框架是对吧,而我们存储框架要满足一个什么样的条件,那得具备什么叫实时可以。实时读取and。
04:00
可以实时写入啊,当然实时写入这个功能啊。还好。对吧。啊,还好,因为嗯,但凡一个存储框架,只要你一条数据写一次,比如说我写到MY,写到h base,写到大家所学习过的什么ES click house,对吧,那我如果让他一秒钟触发一次写出操作,那都可以做到这个实时写入,但关键问题在于还可以实时读取。对吧,啊,我读A,然后呢,加工往B写,那这个很明显要用到的是个什么东西。消息队列对吧?啊,要用到一个消息队列,很明显呢,咱们需要用到一个消息队列这样的内容来做的这个事情啊,所以呢,我们选择的就是大家所学习过的消息队列只有一个,就是卡夫卡。对吧,用卡夫卡来做我们实时数仓的一个分层。
05:05
啊,但是这里边儿有一个点,就是这个所有的内容我们都能放卡夫卡吗。对吧,我们大概想到大部分内容呢,都是放在嘎夫嘎的啊,而我们结合离线说当就行,离线说当呢,五层咱们都是放在have,那我们就大胆的想一下,对吧,我们。能不能把这些东西都放到?卡夫卡。对吧,啊好不好,有没有其他的更好的方案可以替代开发,我们来想一层一层的啊,第一个ods。Ods就是采集的数据,刚采集到的数据我就拿过来,他呢,采集过来的数据呢,不需要做任何的加工处理,对吧,我们ods放卡夫卡可不可以。对吧,我们接下来就一层一层的来讨论这个问题。
06:01
最好是什么?是这五层都能放卡夫卡,这是最好的皆大欢喜,不用不用去搞什么其他的框架了,对吧。那第一个ods可不可以,能不能放卡夫卡?他未来后面还有对吧,还要去。对这个ods数据做加工。然后呢,它前置也不需要做任何的事情。只要去消费它就行了,对吧,好,那这个很明显是可以怎么样。放到。卡不卡的。对吧,那他未来呢,就是你过来一条数据,我把它拿到去消费,这是使用场景。对吧,使用场景是这样子的。啊,那也就是说我们写一下就是使用场景对吧,Ods层的一个使用场景啊,使用场景是什么呢?就刚才我们说的。
07:03
没过来。一条数据读取道并加工并加工处理对吧?好,咱们的场景是这样子的,你不需要做其他的事情,你需要做过滤,过滤版对吧?一条L你可以加好,那这个呢,完全咱们可以用什么用卡夫卡。好,用卡普卡来作为我们的存储力。对吧,啊,那你一个ods可能未来还要被多个人。所使用,所以呢,放到卡卡里边,我只要改一个消费者组,那么你多个不同的消费者组就可以消费到完全相同的数据,对吧,这是第一个卡夫卡,哎,那ods呢,就放到卡夫卡就搞定了。对吧,接下来第二个D。我们也想一想它的使用场景,然后我们再想一想使用卡夫卡能不能行。
08:11
对吧,想一想。Dim层就是咱们的微表层。咱们的使用场景是什么?使用场景是什么?能不能描述一下,可能大家脑子里边都知道怎么用,但是呢,嗯,用文字把它描述一下,可能就好像捋的不是那么好,但是你也得尝试捋一捋,对吧,这些话应该怎么说,因为未来面试的时候。你要给他说出来呀。对吧,类似于这样点,你不能说,哎,我知道。你知道没用,那为什么要面试呢?你得把你知道的说出来,而并且人家能听得懂。对吧?来捋一捋这个DM层,我们应该怎么去描述它的一个使用场景。
09:04
怎么去用对吧。我们应该该如何描述?该如何描述啊?工具层。按什么维度来分析数据,就是使用场景使用,就是比如说类似于这种啊,每过来一条数据,我需要读取到并加工处理。所以呢,它是一个流处理对吧,来一条计算一条实时表,会引用DM层的为表对了。对了啊,就是什么呢。事实表会根据。
10:00
组建获取一行为表数据。这是我们的应用场景吧,就是未来这个维表你要怎么用。你得说明白对吧,那我们是不是要把实时表DW层的实时表跟微表做关联对吧?至于你离线数呢,用的是join对吧?那实书单里面咱们要不要用draw或者其他的方式,这个咱们再聊对吧,但不管怎么样。我一条40秒来了,假如说这是一个订单,对吧,它里面呢,有这个用户ID。UID,那我是不是要根据UID,无论你join也好,你join也就读一条数据嘛,对吧,还是真的去查,那是不是都是获取一行数据啊。对吧,好,那基于这种情况来说,我们想一想能不能用卡夫卡。对吧,我们能不能用卡夫卡。
11:11
思考一下。啊。冯总说了不能啊,大家的答案呢,都说的是不能,为什么呢?从哪个角度来说他?不行呢?卡不卡?啊,大家说呢,他不行对吧,那为什么不行呢。理由是什么?它不是表结构。嗯。我获取一行数据就行了呀,就算你是杰森格式,我也能转换成杰对象啊,对吧,你就算是表结构,你读你用流读进来。
12:05
他不还是没有表结构了吗。不是来一条处理一条啊,主要的原因在于什么?因为根据我们的使用场景,我们发现它有两个要求,第一对吧,两个要求,两个要求如下,第一什么呢?永久存储是不是。大家想它第一个是不是得永久存储啊。第二个呢?他得叫根据主键查询。叫根据主键查询。对吧,那这个呢,第一永久存储这个事情卡法就做不到了。你为表,咱们想维表这个东西是不是应该永久存储啊,对吧,你卡卡就办不到了,因为你默认是七天,你可以改为三天,你改为几天,但是你不可能说我改了它不过期,那不行,那你设置表封了炸了,对吧,你这个消息队列处理完的数据呢,就应该让它过期掉。
13:05
好好,第二个叫根据这个。主键查询。我们目前消费卡卡数据呢,都是怎么样的?都是来一条消费一条,处理一条对吧,这样的方式,而不是说根据某一个主见,我去里边去查,所以从这个角度来说呢,它不适合。啊,他不太适合对吧?好,那这个问题呢,我们要去思考什么框架适合呢,对吧?啊这个呢,我们等会儿单独的去讨论啊,也就是说我们希望五层呢都用到卡夫卡,但是呢,很可惜有的就用不了,好那我们继续DWD层对吧?这个到底用什么,等会我们统一的去讨论啊,等会大罗讨论好,那将来DWD层这个实时表我们的使用场景是什么?事实表数据,我们的应用场景是什么?我们要根据使用场景来看卡夫卡它适不适合,对吧,如果卡夫卡适合,那我尽量的用这个卡夫卡。
14:06
对吧。他。适不适合呢?一次业务过程啊,那没问题,一次业务过程呢,是产生这个DW底层的实时表的一个流程,对吧,那现在呢,我们是说已经产生了,对于这个数据我们应该怎么做。就是使用怎么使用这个数据,对吧,其实他这个使用方式跟这个是不是一样的,就是每过来一条数据读取。并加工。对吧,咱们要做的事情是不是还是这个。是。过来一条数据之后呢,我们读取并加工处理。有没有问题大家说。
15:01
这个有没问题。没毛病吧,好,那么呃,这块东西呢,那当然用卡普卡可不可以啊。因为卡不卡是。可以的。对吧,啊,用卡法是可以的。啊好,那下来我们再看DWS层对吧,卡卡可以,我们就不多聊了,我们希望是卡普卡嘛,对吧,我们当然希望是卡夫卡好,那家DWS层怎么想。他是什么场景呢?对吧。它的使用场景是什么?DWS,我们呢,假如说已经聚合了。对吧,DWS就从DWD读取过来数据之后,我们要做聚合,这个已经聚合了啊对吧,好嗯,你往这个DWS写,写完之后呢,我们去取这个DWS数据,然后接下来看什么事。
16:14
我们把DWS数据取出来干什么事呢?是不是很有可能还要再做处理做加工啊?对吧,因为你有可能写的这个力度呢,比较细,比如说你写了一个商品。拥护省份。对吧,你写了这三个维度组合的一个GMV,然后呢,求了一个GMV啊注意听啊,我们这边呢,DWS假设我做了一个什么呢,用户。省份。加商品。对吧,我用了这三个维度组成的一个力度,注意这是一个力度,对吧,因为我们之前说了力度呢,指的是纬度的组合。好,那么呃,我们呢,把这个聚合起来,求了一个g ma。
17:04
啊,求了一个GMV对吧,嗯,按天或者说实时的话,我们就不按天啊,你不做聚合,或者说你按秒对吧,你按十秒钟或者五秒钟一秒钟。实时这边咱们就不能按天了,对吧,我开一天的窗口就不太合适了,假如说五秒或者三秒对吧,这个就是你公司的业务而定,你希望这个东西应该。是怎么样的一个时效性,你公司的一个时效性及对吧来考虑啊好,那我们求了求之后呢,我们要最后展示A从今天凌晨截止到目前为止总的成交总额。对吧,也就是说它这个数据呢,还得再加工一下,同时呢,你的力度呢,是用户省份加商品三个维度,但是未来呢,我求真正GMMA我要展示出来,我有没有可能只按省份展示,对吧,画一个大的地图,然后呢,我按省份去展示这个GMV。有可能吧,也就是说在里边呢,还要再聚合,再加工处理。
18:05
对吧,再处理一下好,那也就是说他过来的数据呢,每条数据我们要做累加处理,对吧。啊,当然这个呢,并累加处理。而这个呢?是实际上也是要累加处理,而且呢,这个要。定这个分组对吧,也要处理这边呢,可能叫重新分组。累加处理,这懂什么意思吧,这个累加处理呢,可能我们用的是用户。省份。商品力度呢很细对吧,到这个为止,可能我单独用户的GV我要求一个对吧,根据性别啊,然后呢,各个省份的MV我也要求一份啊,然后呢,还有这个根据商品的GMV我也求一份,所以呢,我们就要重新分组累加处理,那基于这种情况而言,我们。
19:04
放到卡夫卡可不可以呢?基于我们所说的这个使用场景,它可不可以呢?思考一下,就当前我们的使用场景而言,它可不可以啊?它其实也是可以的吧,对吧,那你无非消费到数据之后呢,你做一个累加,你把每天的数据呢,加在一块儿。对吧?啊,截止到目前为止,做一个累加就好了,当然是可以的,对吧?好,那最后我们再讨论ADS,那ADS它的使用场景是什么。
20:02
ADS,我们的使用场景是什么?ADS的使用场景是什么?叫读取它的使用,根据离线数单来吧,叫读取最终结果数据。对吧,展示对获取各种各样的一个指标,就是你加工好以后写到ADS。对吧,它是最终的指标,它是最终的指标,然后呢,我们对他这个数据呢,就是读取过来写成这个数据接口,对吧,然后呢,做一个展示啊做一个展示,那这个放到卡夫卡好不好呢。
21:06
放到卡夫卡好不好呢?能不能行呢,或者说放在卡发好了呢,很明显不好。对吧,很明显不好,那这个是不是简单一点,我们可以想象用什么。我们能不能跟离线收藏一样,也用这个最后的my circle,对吧,我就直接写到my circle里边,最终呢,你展示出来可不可以。能理解吗?假如说我们选用,大家能理解吗?这个OK吗?就假如说我们把最终的结果对吧,通过DWS。读取DWS数据再做加工,对吧,最后写到MYSO里边,然后呢,你读取MYSO数据做最终的展示,这个大家能能不能理解。
22:02
啊。这可以吗?可以扣一啊。OK吧,好这个呢,目前咱们就这样定,但是这里边儿有几个问题啊,第一这我们还没选什么框架呢。最大的问题在这儿吧,第二,其实后面这些东西呢,我们有更好的处理方案,对吧?就目前来说呢,我们先这样选用啊,那这样没问题,但是呢,这两个DWS层跟ADS层我们还有更好的处理方案啊,原因呢,我们等会再聊对吧?啊,当然呢,我们先聊DM层,我们到底选用什么框架,然后接下来呢,聊这个有更好的替代方案,应该怎么处理怎么做,对吧?好,那我们先下课休息一下好。
我来说两句