00:00
呃,接下来呢,写这个主程序啊,主程序的话呢,我拿一下这个名字啊,叫base log基本的对吧,嗯,应该是的base log APP啊。在DWD上。对吧,咱们来一个叫base APP啊,他呢只是说把这个日志数据给它拆开,那按照我们刚才所说的那个流程,我们来把这个留程梳理一下,思路梳理一下啊,那么第一步。还是一样的获取执行环境对吧。这个大家一定要跟上,一定要去边思考啊,回想我们刚才所播的那一张PPT,对吧,里边做的事情啊,这就是我们的整个流程。呃,第二个,那当然是消费。卡不卡?加topic。Lock。主题的数据创建流对吧,好,那第三。
01:09
消费完这个内容以后。啊,消费完这个内容以后,那我们首先要做过滤,对吧?啊过滤啊过滤掉。过滤料叫非切。格式的数据and将每行数据转换为接对象对吧,因为为了方便后续要做数据处理啊,那我们要转成结算对象啊,那第四步。已经。做到了杰森对象了啊,接下来呢,我们就做新老用户。新老访客啊,我说访客吧,啊,用户的话,大家可能还是会想到这个UID啊,那我们是m midd,我们叫访客可以吧,呃,新老访客的。
02:00
标签的校验对吧,好,那嗯。咱们呢,嗯,那也就是说你直接写这个写呀。对吧,啊,写这个注释不行。为什么呢?因为我们新的访客要做一个状态编程,对吧,那我们这个状态呢,是。应该用监控状态吧,就是每一个mid有一个自己的状态,大家想是不是?对吧,我们这个状态不能混着用啊,对吧,得是一个mid,每一个有一个自己的状态,对吧,所以这块呢,咱们要按照mid。做什么做K啊叫分组对吧,然后第五步才是什么叫使用状态。编程。啊,状态变成叫呃,新老用户,新老访客做。辛劳。访客。
03:00
标记的什么脚印?OK吧啊,他一定有一个按照mid分组的这个操作,每个mid咱们有一个状态啊,你不能混着用对吧,好,那这个校验搞定,接下来呢,嗯,就到最后一步了啊,也不能最后一步,你的复杂业务逻辑的最后一步,对吧,叫使用。测输出流进行。分流处理。好,那接下来提取。各个。测输出流数据。对吧,好,那。第八。将。数据。写入对应的主题,因为加上主流,我们有五个流对吧,五个流写到五个不同的主题里边,那就搞定了啊,当然了,我们将数据做一个打印。
04:00
对吧。因为打印的话,我们方便看结果啊好,那最后。别忘了,还有一个第九步,启动任务。写能用OK吧,啊,那这个呢,是我们整个的一个逻辑啊,这里边儿唯一跟我们PPT上面有一点不同的就这。对吧,就这一步在PPT上没有体现,但是你自己应该能想到,我们肯定要按照mid做分组。对吧,啊,因为每一个m mid有一个自己的。状态才行,你不能说把不同的MIT混着,我是新来的,你呢?不是新来的,你有状态,那是你的,跟我没关系。对吧,所以它必然是每一个mid有自己的状态啊,所以我们要用监控状态啊,按照mid分组的一个监控状态,对吧?啊,那第一步获取我们的执行环境,那么我们就不写了啊。这个呢都一样,我之前就说过了,我的到最后呢,我都会直接粘对吧,因为这个东西你再写其实意义不大。
05:03
啊,如果说你对于这个东西不熟,你也可以再写啊,你再写个两三遍应该就差不多了啊,你也就不用写了,对吧,如果说对于这个东西已经很熟的,你也就可以不写了,直接粘了对吧,无所谓啊好,那接下来呢,消费这个主题啊,我们快写一下three。叫topic啊,Topic名称呢,是叫对吧。然后接下来我们再来一个消费者组哈。啊,消费者组呢,咱们还是用这个啊。这样的话,我能保证每一个程序它一定都不一样,对吧,因为我用当前的。名称啊类名来做的消费者组。接下来消费啊,那就因为点。叫MYKA点卡个consumer对吧,然后呢,把这个主题。
06:04
ID传进去,那这样的话,我们就得到了一个卡夫卡的一个DS对吧,好,得到这个样的一个数据流,好,那接下来呢,我们。要对这个数据进行过滤,过滤掉非接格式的数据啊,呃,然后并且将每行数据转化为接送对象,那起码得用来map,而且是一个。要用Fla map了,对吧,你要一步操作啊,那你用filter再用map也可以用两步,因为这里面涉及两个操作,第一个过滤,第二个呢转换。好,那呃,我们呢,用Fla map可以搞定,这个我们写过了啊,当然我们说了,我们想要保留脏数据,我们要写到测出之流,对吧?啊,那测出流的话只能用process啊,那我们就写一下,在这边呢,你有一个叫out。然后呢,里边放string就行了,因为原封不动的写出去啊,这个呢,我们叫。Dirty。
07:01
OK吧?咱们呢,呃,脏数据啊,那叫德。好,那我们先把这个标记先写好,在外面写对吧,在这边呢,我们就定义叫process。一个。叫process方式,哎,输出数据呢,当然是杰森object,对吧,这个我们之前讨论过,我们要转成这个杰森。好,那么我们就要把这个转成。之项,那这个比较简单,那么就杰森啊,点pass object,然后呢,Y放进去。还得到一个杰森第啊正常的呢,我们就输出啊,但是呢,它有可能不是杰森,他就会抛异常对吧,那我们要对他做一个什么开catch。开对吧,呃,那如果说你只想解决这个杰森这种格式异常,那你可以写一个pass一个。对吧,嗯,哎,我看一下这个地方。
08:03
啊,他不让我们这样写,那我们还是吧,对吧。不是没到那个。啊啊,他应该是我刚才导错包了啊。对吧,好,那不管了,我们就抛一个exception也行,对吧?好,那如果说没有发生异常,那我们的这个是不是输出到主流啊,那主流的话就out点。Connect,然后呢接object,好,那如果发生异常了呢,我们写到测数流吧,对吧,这个地方是cx.output然后呢,把这个Di talk,然后把这个value本身放进去。对吧,这样的话呢,我们就得到了,这个是主流啊,那就是杰森。OBJ的DS接对象的一个。不流对吧,这边呢,我们额外获取。测输出流脏数据。对应打印。对吧,我们把它获取出来,那就是拿着杰森点get set output,把这个dirty ta传进去啊,加V得到一。
09:07
Dirty。D啊,那家来呢,对它做一个打印吧,点print啊,这前面呢,我们加一个前缀,这样呢我们就好看一点啊。啊,打印流的时候我们做一个前缀啊,生产环境当中,如果说你做了这个事儿,一般来说呢,你要保留下来,对吧,那你可以写库啊,不做打印你可以写库,那这样的话云料保存下来,你未来随时可以查,诶那我们脏数据有多少条对吧,能够查得到啊,这样就比较方便一点,OK吧,这是我们所说的一个点啊。呃,那接下来呢,我们去把这一步做了,因为它最复杂的呢,是这个跟。这个对吧,这两步比较复杂啊,所以呢,我们接下来把这个呢来实现一下。呃,按照m mid分组对吧,那首先呢,我们做一个K。啊,做一个K。
10:00
呃,那我们m mid在哪呢?来看啊,我们所有的数据它是一个什么,是一个接套接格式吧,对吧,那首先第一个是一个什么common。他们里边呢,又是一个阶层对吧?A DA ch渠道对吧?Is new刚看到啊呃,然后呢,A mid在这啊,操作系统UID对吧,Motion啊,那m mid在这,那首先咱们是不是先获取common,然后再获取common里的midd啊。OK吗?对不对。这个没问题吧,这个格式啊,它是这样的,或者说呢,咱们这啊。呃,大家呢,可能看不太清楚,然后呢,我们用一个。解析工具,我们来看一眼啊,这样可能看得更清楚一些啊。
11:07
好,它长这样。对吧,来看啊,我把这个缩进一下。嗯,Start ts我看啊,这个我把它缩进一下,稍微调一下对吧。好,那它呢,整体上首先是一个大的阶层,没毛病,大的阶层里边呢,有common start。TS,当然这是一个启动日志,对吧,如果呢,你是一个页面日志,它也都有这个common common所有人都有公共字段嘛,肯定都有对吧?那我们要的mid是在哪儿,在大的杰森,然后呢,Common里边有一个。M mid,所以呢,我们要根据它做分组的话,那首先要获取common,然后获取mid,对吧?好,那这个呢,咱们就可以写了,呃,直接写一个杰森,因为我们已经转化为杰森格式了,对吧?好。
12:11
先获取common字段get object把common获取到,接下来继续获取get,对吧?啊,那我们获取mid,注意啊,这个地方不要写错了,第一个common,第二个mid都不要写错了,对吧,因为你这如果。某个字母写错了,他并不会报错。对吧,你在这,哎,我写一个CC他也不会报错。啊,但是呢,你运行起来之后,你根本没有CC,那获取的它就是个nu值,它nu值你就get string,它就会怎么样控制针。OK吧,所以你这儿你就不要自己随便写了,你要是不放心自己敲这个字符串的一个能力,对吧,你就从这粘一下啊,从这粘一下,这样就不会出错,OK吧,这给大家提示了啊,因为每个班。
13:02
Common都有写错的。啊,他也不是说故意写错对吧,啊,就是说有时候。一敲A字母呢,敲到旁边的字母了。对吧,它敲到旁边的字母了啊,就就导致错了啊,特别是这个M对吧,哎,这写了个N,那首先呢,N跟M还在一块。对吧,然后呢,嗯,看着还挺像这玩意儿。啊,所以呢,容易写错啊,容易写错啊,希望大家不要犯这个错误,对吧,因为这种错误呢,你这个地方还报控制针,你下面有的字符站写错了,可能就没有结果,他也不报什么控制帧,那这种问题就很难找。对吧?啊,不要写错了,你就最好去粘一下,就不会有问题啊,二加V,那这样的话我们就得到了一个监控流叫K的swim OK了啊,这个事情咱们就做一下啊,按照M麦分组啊,那后面呢,怎么样怎么做这个事了,就比较麻烦了啊,我把这个截一下。
我来说两句