00:00
呃,那么这个测试怎么来测试的,那既然你们已经往卡卡提了,那这个时候呢,那我就得去从咱们这里来读呗,要从哪里读对吧,大家想想,那么如果读的话,我这数据本身从哪读的,是从咱DWD层读的呀,对吧?那么DWD层再往下的话,那么它其实该始属于我DWS层,对吧?所以说呢,那我在那DWS层,我创建一个我这个什么呀,创建一个我的应用,比如叫order外的AP来专门的去接收我的数据,把专门的去接入数据,只不过这个时候呢,咱们在当前我这个类里边接入数据呢,它不是一个的同学们啊,它不是一个了,来咱们把这个呢去做一下,做一下,呃,在哪呢,在咱们这里边啊,在咱这里边给取消,我呢去新创建一个我们这个啊,这个程序啊,把它放在哪呢?放在DWS下边,对,然后接下来比如说有一个叫order y的APP啊,Order外的APP,然后接下来咱们现在呢,把这个写一下。
01:00
对吧,这个啊,我们要写一下,呃,那么首先对这个作用干什么呢?它要从我们这个卡夫卡的DWD层对吧,来读取谁呢?来读取我们的订单和订单明细,它的一个数据啊,我要从我们的卡卡把这里边把订单订单明细数去给读过来,等于是我现在啊要读俩同学们这个读俩这个和他读一个有啥区别对吧。啊,那就是写两遍呗,对吧,这这这什么,我原来我是写一遍对吧,现在干什么,现在写两遍就完事了呗,对吧,那来注意看啊,对吧,在这里呢,我要稍微的把这个写一下,但有些东西我这个就不写了,对吧,比如说啊,那么我现在呢,在咱们这里边对吧?把这个东西拿过来啊,把这东西拿过来。那么拿来之后呢,那么咱们现在先来看一看,这里有一个什么呢?有一个叫做我们这个order in for对吧,这个是这这主题呗,要从哪个主题里边读对吧?那么咱先从我订单里边读,假如说同学们咱们先从订单里边读对吧,把这个东西写一遍对吧,今天对吧,全复制了对吧,没写呢,咱也也写一下对写一下,那么你现在要写之前,首先第一件事干什么,是不是得获取偏移量啊,来获取我们这个偏移量对吧?那么获取偏量的时候呢,那这会其实一个是我们的order INF for group对吧,呃,Order,这这个这可以,其实order in for group也行,对吧,DWS也行对吧,那么咱们现在呢,在这里啊,那假如说对吧,那我要获取偏移量,那么会偏怎么来获取呢?不是有一个什么off outside many YouTube点我们是不是有get outside呀,传两个参数过去,一个呢,订单的,它的一个topic对吧,一个订单topic,那么另外一个呢,是我们的订单对吧,它的一个我们这个这。
02:59
的组的消费者组。
03:02
它的ID对吧?然后接下来,那么咱们现在把这个东西拿过来之后呢,那点VR,它返回的是不是我们现在它的一个mapb集合呀,这个呢,应该是我们这个order in form,它的一个outside map对吧?这当前订单的一个outside map,然后接下来,那么咱们是不是要判断一下它是不是为空碗对吧?那在这里,那我要判断一下咱们当前的偏量是不是拿到了,如果说它现在在这里不等于空,然后并且咱们现在呢,在这里它的一个size对吧?那么如果要是大于零的话,那么这个时候说明什么?说明咱们拿到偏移量了,那么如果拿到偏移量的话,那这个时候咱们是不是应该从指定的偏量位置来开始进行消费呀,对吧?那怎么来做呢?那应该是MY卡夫卡对吧?U,那么这里呢,有一个方法叫get theca stream,然后把它这个现在参数传过去,一个呢,是我们的order in for topic,那么另外一个呢,SSC。
04:02
还有一个这个是我们的一个对吧,是我现在当前吧,它的一个偏移量啊,对吧,然后再往下这里再来一个有一个我们的一个各快递对吧,那咱现在呢,在这里把这个东西啊,应该给传过去对吧。在这里啊,这个没不任何YD是在这里是来,那他现在呢,把这个东西拿过来,对了,现在B2B2,那么这个是谁呢?这个是不是应该是我们当前订单的啊,这个叫什么呢?这个叫奥赛呢。一块呢?好了,那么接下来如果说啊,我现在呢,这里边啊,要是什么呢?要是我们现在这个这这这个东西要是没有取到偏移量,没有取到偏移量是不是咱把这个东西干掉了呀,对,把这东西啊给干掉了对吧?然后接下来咱们现在呢,把这个东西提出来呗,对吧?来CTRLX对吧,然后接下来我们现在呢,把它抽取出来,给它赋制一个now对吧,然后呢,咱们在这里给它做一个我们的赋值对吧,在这里做个赋值对吧?然后接下来把这个改成V2对吧,这块呢给改一下,把这改一下对吧?那到目前为止,咱现在这个偏量获取完了,那获取完偏量之后呢,那这里注意啊,其实我现在呢,那你这个偏量一开始你获得是不是刚读之前的呀,那你消费完之后呢,那本批次咱们现在读了,你的偏量是不是变了呀,对吧,所以说呢,那咱们现在在这里是不是还得把这个本批次对吧,你当前这个主题对应的分句偏量给它获取到,那怎么。
05:51
获取呢,是不是应该用我们的第一次stream,它点什么呢?对吧?点我们这个transform对吧,Transform,然后做一个转换,拿到RDD对吧,拿到RD之后呢,咱RD的数据呢,我不变,我主要目的干什么对吧?我主要目的呢,其实就是把咱们现在对吧它的一个我们这个对吧,这这个这个偏移量给拿到对吧,那么怎么拿呢?这里边有一个我们这个方法对吧,叫set range,但是呢,它用不了,咱们需要去强转一下对吧,这个强转把它转化成has outside range,然后现在点我们的outside range对吧,然后去是吧把它抽取出来,然后呢,拿到我的range,这个outside range,注意啊,这谁的呢?这个东西应该是我们这个order in for outside range对吧,这个是我们这个order in for the range,然后把这个东西呢,CTRLX对吧,然后接来CTRL啊V等于我们的every.empty对吧,然后接下来对吧,这里我们再写一个opposite。
06:51
啊,Range端o range,然后接下来在这呢,CTRLC把这个呢复制一下,把这个改成R,都要把这改成好了,那咱们现在这里是不是得去点2VR一下对吧,那么这个VR呢,那它返回一个结果对吧?这个呢是我们这个order in four,然后呢,Stream啊order in for did stream好了,那咱现在呢,把这个did呀给拿到了啊把这个东西,然后现在呢给拿到了,对吧,这块应该很熟了吧,同学们。
07:26
啊,就是咱们现在这这条代码应该很熟了吧,对吧,这是单流对吧,那双流怎么办呢?复制粘贴对吧?这个如果说咱们现在你直接啊同学们,如果你直接要是去拷贝的话,那就简单了,对吧,不涉及这些事对吧?那如果说咱们现在要写两遍的话,那你得对吧,睁大眼睛帮我一块看着对吧,咱们现在呢,该改的东西是不是都改了对吧?该改的东西是不是都改了?首先呢,那这里咱们这块呢,别叫order in for了,这个叫什么order detail对吧,这个是当前订单明细的主题,然后这个呢是order detail对吧,它的格YD,那这块咱们是不是也得改一改,这个应该是dwd order detail这块呢,把它改一下对吧,这个呢是我们这个detail,然后接下来,那么你现在是不是要获取偏移量啊,对吧,那这个偏移量怎么获取呢?对吧?那咱们得要来一份对吧,这个这都得写两份了,同学们对吧。
08:26
那么咱们现在呢,这里不光要获取我们这个啊order in for,还一个是order detailed对吧,那么如果要获取的话,这块,那你这个主题对吧,你是不是得拿咱们的order detail呀,对吧,来把这个对吧,然后这块呢,也是我们这个order detail它的格ID,好那接下来那么咱们现在啊,这个获取偏移量,那么你现在呢,是不是得判断一下它是不是等于空啊对吧?那么如果它说等于空的话,那么这块的代码呢,CTRLC对吧,那你得写两份对吧,这块L代码呢,你该CTRLC对吧,写两份对吧,那么他写两份的话,那这块呢,是不是应该判断的是我们的订单它的一个偏移量的订单明细的偏量对吧?那咱们现在呢,来到这对吧,来到这来看一看啊,在这里首先呢,判断一下这个东西是不等于空,并且呢,它的一个size是不是大于零,那么如果说咱们现在呢,要不等于空的话,那咱们想取到的应该是order什么。
09:26
Detail,对,Record,那这块呢,名字改一改对吧,这个名字呢改一改对吧,然后接下来那么咱们现在呢,在获取的时候,那这块呢,那也应该是order detail对吧,然后呢,Topic,然后这块呢,也是呢,我们这个order detail我这都改一遍啊改一下,然后这块呢也是啊,这个是关于它的一个啊,它的一个偏移量,然后这块呢格YD也要改一改,然后这块呢也要改一下啊,这也要改一下,好这第二个,这第二个关于我们现在呢,它的一个我们这个根据偏移量啊来读取我们的stream,然后第三个,那么这块的东西是不是也得走一遍呀,对吧?那么咱们现在呢,在这里有order in inform啊订单有order detail订单明细它的一个stream,然后接下来呢,咱们是不是得这个根据我当前的RD stream达到RD,然后根据RD来获取它的一个短偏向的一个。
10:26
读取情况呀,对吧,所以说这块代码呢,CTRLC对吧,来拿过来再走一遍对吧,这个应该是order detail,然后这呢,CTRLC的CTRLV,然后接下来那么咱们现在这里放的东西,这不需要改,然后这块呢,也叫order in inform,这个叫order detail order detailtri,然后接下来,那么咱们现在这数据哪来的呢?是不是应该是根据我们的order detail recordri对吧,Detail对吧,来进行一个转换,然后转换成把这RD拿到对吧,然后接下来那么它的也是对,其实这里面东西都一样的,把名字改一改就行了,对吧,那这样的话,咱们现在呢,对吧,拿到了两个stream,拿到两个之后呢,那接下来同学们先简单点对吧,什么呢?一个是order in,对吧,Stream点我们的print做一个打印输出,对吧,做一个打印输出,然后接下来那么另外一个stream,对吧,这是order detail stream点我们现在呢。
11:26
去打印输入一下,去打印输入一下,然后接下来咱们现在的SSC,点我们个start对吧,然后SSC,我们这个away的好了。两溜读过来了呗,这代码写的有意思,同学们有啥意思,这代码这感觉就是写写这种代码才有感觉是吧?打工人吧,对吧?对现在才有感觉到是吧?这个搬砖是什么意思啊,为什么说是搬砖对吧?这就明显从脑力劳动就跑到体力劳动上来了,对吧?这种东西一点意思没有对吧,一点意思没有对吧?但是假如说同学们,就像刚才咱们说的,就是包括我上节课做的,对刚才同学课间也问我说老师我们在咱们这个对吧,这个实际这个实施项目里边,对吧,是不是也这样来做,同学们只要你们是实施项目,一般肯定会有一些维度数据,维度数据的处理,那肯定得提前准备好,咱们说维度和事实它俩区别就最大在什么地方,是不是我这个维度数据它的存在,它的出现应该在咱们的事实数据存在之前呀,对吧,就我事实我的业务数据发生之前,我的维度数据已经准备好了,对吧,那只要你准备维度数据,就刚才咱们做的这些事儿,你创建一个什么H变表啊,然后什么初始化呀,这些东西你肯。
12:41
肯定要走一遍对吧,但是这个东西不会经常走对吧?不会经常走,有可能是什么呢?有可能你们公司维度数据不经常变化对吧?他就像咱们刚才这样启动运行一次,然后之后就停了啊,以后就不用再刷了,不就不用不用再运行了,可能说啥时候如果现在要去添加一些对什么数据过来,对吧,那么这个时候你再单独去跑一次,把这维度数据自行更新,这就行了,对吧,就没有必要说在咱们这个去专门去跑一个我这个进程去更新的,就跟踪它对吧?哎,这块呢,知道一下好了,那咱们现在呢,把这个东西拿到之后啊,同学们把这个拿到之后,对吧,那我就做一个测试运行一下呗,对吧,做测试运行一下,那么大家想一想,我现在要想看到效果,我应该体现什么东西,考验你们这个机器性能的时候到了,对吧,到这儿啊,同学们可能有些机器就跑不了了啊,就跑不起来,但是大家注意这个结果不重要了,因为你想一想我今天讲的代码你们都写过。
13:34
你只是看不到效果,就说我说是现在机器可能顶不住了,那没关系,不重要了,对吧?来那咱现在想想多起什么东西,同学们,就是咱们现在这该起的服务呢,那已经提起来了,那么如果说你要想让我能看到我这个对这个效果,大家想一想,首先第一个咱们在ods层,我这个马一直都我起起来对吧,所以说呢,来我看一看,我现在手也没起啊,来右键把它呢给起起来对吧,这第一个,那么起完他之后呢,咱们在这里他做的什么,说做一个分流了,那么分流的话,我现在把订单和订单明细分到不同的主题里面去了,你是不是得有专门的我们的Spark spring程序来对订单和订单明细来进行处理啊,所以说咱们接下来要起什么,是不是得来到DWD仓把我们现在这个order in inform给起一下,打来右键把它呢,得给起一下,对吧,把它起一下,然后呢,除了我这个订单之外,咱们的订单明细是不是也有专门的应用同学来处理。
14:35
一下来右键把它呢给提起来对吧?那么现在他们两个企源的目的是干什么,他会从卡不卡它的一个ods层来读取我们那这个订单和订单明细的数据,然后接下来他们的主要作用,咱们在这里其实是不是就做了一个我们这个维度的关联呀的订单和我们这个用户以及省份进行关联,订单明细和咱们商品对吧,然后呢,品品类对吧,这个品牌对吧呢,以及FPU进行关联,那么关联之后我们是不是又把这东西又写到我的卡卡去了呀,对吧?那么你要写了卡卡出去,你就得把再把它读出来呀,谁来读,是不是咱们刚才写的这个order外的来读它呀,所以说它是不是也得这个这个运用起来,它在哪呢?在咱DWS层把这个东西右键,然后呢,运用起来也是你要想看这个效果,那么他们现在最起码说这四个应用跑不了了吧,对吧,其实正常情况如果你要想看实时监控变化的话,那么咱们维度那几个也得提起来,对吧,如果说正常情况下同学们也起。
15:35
把应该起几个了,现在对吧,在这呢,那如果都提起来123456对吧,然后记下来看一看。十个对吧,现在要什么话,应该是大概十个呗,对吧,来十个对吧,但咱现在呢,这维度的这些我不要了,咱们就起来四个就行,对吧,起来四个对吧,就能考察出你们现在这个这个计算机的性能怎么样了,是不是来啊,那么咱们现在呢,来看效果,同学们如果想看效果的话,那咱们现在是不是在这里来重新生成一下呀,来在这里我们去来模拟这个数据看效果啊同学们。
16:16
那么模拟生成完数据之后呢?你的脑子里面再想一想,这个数据生成完之后,它是怎么走的?啊,这个数据生成完之后,他都后后面都怎么走的,首先呢,咱们现在在这里同学们数据生成完之后,他写到哪去了,是不是写到数据库里面去了,那么咱们现在谁兼顾的数据库的变化了呢?是不是在mawell呀,对mawell监数据变化之后,他把这个数据写到哪了,是不是写到卡不卡的这个主题里边去了呀,然后接下来咱们是不是有一个我们这个马APP去兼顾咱们现在这个主题的呀,它会根据我当前的表明说对咱数据做一个分流啊,那么分流之后,咱们这里是不是要从我们当前的卡卡主题里边来读谁呢?是不是来读我们现在什么这个订单以及订单明细的数据啊,当然这些维度数据呢,他也会读取啊,这维度数据他也会读取,对吧?然后接下来我们对订单做一个维度关联,对订单明细做一个维度关联,等到维度关联的时候,这个数据从哪来的呢?是不是咱都从A里面来拿的呀,对吧?然后接下来我们将关联以后啊,它的一个这个数据又写回到哪呢?又写回到了我们这个卡夫卡,对吧?然后接下来我们去创建一个我们应用,从卡卡里边把这。
17:23
数据的给你读出来对吧,那么看一看这个数据来没来对吧,好像有问题吧,对吧,你看我我我在这里我的订单对吧,来看没扛住对吧,在咱这里对看一下对吧,Consumer record对吧,我相信同学们应该也会也有有运营的时候也会碰到这这这个问题啊对吧,大家看对吧,说没有序列化对吧,然后接下来在咱们这里边呢,对吧,把这个拿到了对吧?呃,什么原因呢?注意同学们对吧,这个东西呢,这个给大家把这个说一下正好对吧,其实我们现在本身啊,我我这里我拿到的是什么,我拿到的是不是其实是我们那个卡夫卡它的一个原生的这样的一个stream,那么原生stream它里边呢?啊,其实封装的什么?封装是我们consumer card的这个东西,如果你直接输出的话,直接打印的话,他就告诉你这个东西呢,你不能去访问的,对吧,他告诉你没有序列化对吧,没有序列化对吧,那咱们现在可以把它转。
18:23
转换一下来,比如说我现在在咱们这里,我打印一下,我不打印它了,谁呢?我点我们这个map,然后接下来咱们这里我是不是可以取的其中Y的部分,对吧?然后接下来这里边呢,那也是注意啊,点我们这个map,然后现在呢,我取谁我取Y的部分,那么如果取Y的部分的话,大家想想,那么这个时候你操作的是谁了呀,你操作的是不是就是咱们这个Jason格式字串了呀,对吧?那么这个字符串的话,它默认的已经帮你实现我so对吧这个接口了,对吧?所以说呢,咱们一般情况下,你不要直接对他做咱们的输出,对吧,师老师,那我做别的操作呢,没问题,其实就是打印操作对吧,这块呢,对吧,会有问题对,会有问题来,那现在呢,重新把这个起一下来试一试啊,重新把它起一下试一试。
19:17
来,那咱现在呢,来去把这个执行一下啊,来去执行一下啊。看咱们这效果对吧,看咱们这效果。看一看能不能把这数据给拿到啊,看一看能不能把数据拿到,好了,那咱现在呢,同学们看一下,我们现在呢,这里边短到应该有一些数据呢,对吧,这些输出来了,对,应该有些数据输出来了,对吧,这个VALUE6嘛,对吧,在咱们这里边对吧,大家看这里边是不是有些数据啊,这里边呢也有些数据,像上面这个呢,应该是什么,你看有什么省份名称,这应该是订单吧,对吧,那下面这个应该什么订单明细呀,对吧?诶而且你看我订单明细在哪,在65000这这这个号表支出的,然后订单呢,看一看6000对吧,哎,那也就说目前啊同学们,咱们现在可以实现什么呢?可实现我们现在对吧,从我卡卡里边读两个流过来,但是我们说我要处理的话,我是不是得把这两个流合在一块呢,怎么合怎么合。
20:22
啊,这两个流我怎么样把它合到一块中文呗,对不对啊,所以说咱现在呢,这个join很简单对吧,怎么办呢,直接对吧,咱们这个双流撞一下就行了呗,什么叫双照,原来是一个流,现在俩流往一块一合对吧,往一块一照就像是双流照对吧?那么咱们现在呢,注意看同学们,其实呢,我拿到这数据之后呢,那我如果要是这个严格的讲对吧,那我应该什么呢?我应该把这里边结构呢再转换一下对吧?呃,上边这块呢,这个叫啊,这个叫什么record对吧,All for record。
21:00
然后接下来咱现在呢,来我再去转换一下,再转换一下吧,对吧,比如说我现在呢,这是order in for dream对吧,然后接下来我在这呢,去做一个转换对吧,点我们现在这个map对吧,去做一个map对吧,那么如果转换的话,同学们那map的话呢,那本身啊,他拿到的应该是一个我们这样的一个对象record对吧,他拿到应该是一个对吧一个对象,然后接下来咱们要把这record对象转化什么,转化成我们现在一个订单多这订单,那么这个东西那应该是先拿到Jason吧,对吧,先拿到Jason,那应该是record.w value,对这个东西咱们单独去转换一下,点VR拿到的一个order in for Jason s tr对吧,然后接下来咱们呢,可以通过我们的Jason对吧这样的一个我们的方法对吧,在这里我可以通过JA的方法,然后它呢有一个叫。
22:01
Pass object对吧,把咱们这个对象呢,Order对吧,In forr转换成谁呢?Class of,咱们现在转换成我们这个order in inform啊转换成我们现在的order in inform对吧,然后转换之后呢,那么咱们现在DRVR对吧,拿到的是我们的order in inform stream啊拿到order in for对吧,这上升有了对吧,拿拿拿拿到order in for two1吧,对吧,啊order in for two对吧,然后接下来那么咱们现在呢,那么再往下走的话,对吧,那这里我们其实也可以对我们这个订单明细啊做这个事儿啊,也可以对订订单明细做这个事儿对吧,那这块呢,改成我们这个order detail对然这块呢,是我们这个order detail。然后这块呢,是我们这个order detail啊,这样的一个压力类,对,然后接下来他拿的数据还是这个,只不过这块呢是order detail啊,把这个改一下,然后这块呢,咱们这个转换成auto detail类型啊,这auto类型,然后接下来咱们是不是它俩可以join下来呀,对吧?那么这怎么join下呢?是不是直接去调join的方法呀,同学们,但是注意啊,我这么直接调,直接调到join的方法能调到吗?
23:20
啊,能调到吗?都我直接调到这东西,你看没有啊,啊对,因为咱们这个join它是不是得用K和V呀,对吧,你想两张表进行关联,我是不是得有一个这个外键主外键这关联呀,对吧,你现在这么的话,你这里没有咱们的K和V,那这个时候怎么办呢?那那肯定不行,所以说呢,那咱们现在这里那也简单呀,转换一下呗,对吧,把咱们上面这个东西去稍微做一个转换,对找成K形式对吧,那比如说我现在呢。在这里把它做一个我转换,那转换的话,这里大家想一想它俩join,那么这里这个key那应该是什么?是不是就咱们当前我们现在这个order段ID啊来在这里啊,我去点VR一下拿到的这个order info,然后这个呢,应该是order info点我们的ID,然后呢,这个是不是就order e本身呀,那么它返回的这应该是一个我们的元组,那元组呢,咱们看order ID什么类型的long类型对吧?那么这块呢,那应该是我们的一个long类型,然后这块呢,是我们的order in inform对吧,同学们我这么改能理解吧,对吧?那咱们现在呢,这块什么,这块其实呢,是我们的order in for with key对吧,With key stream别叫什么一了,对吧?然后接下来那再往下走,那么这块其实也一样,对吧,你拿到record了,然后进来点我们现在VR这块是谁,这会order detail吧,对吧,那么order detail的话,这时候咱们现在也要给他返回一个数据,返回谁呢。
24:52
那应该是order detail,点谁同学们ID吗?那就完蛋了,同学们如果是order.id的话,那他俩肯定照应不上,因为咱们这两链接靠谁是不是靠的订单的ID呀,所以说这块你现在要把谁拿到,是不是应该是我们的order ID给拿到,然后接下来把order detail对吧,给它传过去,那么这块它的返回值那也是个元组对吧?这里啊,它返回的这封装对象也元组,那第一个也是我们这个long的一些数据呗,那第二个是order detail,然后接下来咱们这个名字改一改,这是all detail with key对吧,With key对吧?那么stream,那现在是不是可以join了呀,对吧?那么咱现在呢,Order info stream啊,Order啊,Info,然后呢,咱们那个with key是did tri,然后点咱们现在呢去撞一下啊,去撞一下,这里是不是有了呀,谁呢?Order detail with key did tri。
25:52
然后完事了,得到一个零短流,这个流呢,就是咱们这个join的的双流合并完事了,同学们怎么样,思路能理解吗?对,但是别记这个错的是不是,咱们顺着咱们现在思路这么写是不是有问题的呀,对吧,你想一想,你能够保证咱们俩在一个流里边吗?保证不了啊,对不对,所以双流照他这个这个这个思路啊,对吧,咱们得重点讲解啊,上午来到这儿啊,去吃饭吧,同学们啊。
我来说两句