00:00
结束之后拿来做总结是吧?呃,昨天呢,咱们其实主要的完成的功能对吧,是在咱们这块对吧,就是现在呢,呃,已经啊把我们现在这个数据是吧?从我们这个DWD层把这两个主题的数据给读出来了,然后读到这个之后呢,咱们做了一个我们这个双流状,然后并且呢,计算了一个实物分摊啊并且做了一个实物分摊,然后接下来把这实物分摊做完之后呢,那我们把数据啊保存到我们的clean house里边去了啊给大家介绍了一个我们的数据库啊clean house那这块呢,我不知道你们昨天在做的时候啊,那有没有同学啊碰到这样的问题什么呢?就是我现在要想把这个可令号保存对吧,但是我机器呢的这个运行不了这么多程序,所以说可令号数据呢,没办法保存,然后你们有没有尝试着想一些什么解决办法呀。关掉来search还有别的吗?呃,其实这块我不知道大家的这个能不能想到,就是我现在在打click house里边,我是给大家介绍一个数据的一个导出啊,对吧,你可以让你通知帮你看看有没有是吧,这个导入的办法啊,就是我现在就想这这个东西,其实我们呢,我们给大家介绍导入对吧,但其实你可以想对吧,我现在可以导出去对吧,我能不能导入的,我就clean house里不来对吧,那么如果导到可号里边来什么前面这些东西我们都可以不要,只要我clean house请了就行。
01:23
对吧,然后我就可以去干什么发布数据接口,因为你想一想,咱们在发布数据接口的时候,我运行的是咱们这publish这个项目呀,对吧,啊publish布项目这块呢,注意啊这个东西对吧,大家可以自己去扩展对吧,你看一看对吧,能不能导入对能导入进来,其实我可以给你一个脚本对吧,这个脚本呢,对吧,其实比较简单的对吧,其实比较简单,就和咱们现在这个买S导出导出其实差不多,对吧,我可以把这个直接给你运行啊,有数据了,但我希望呢,诶你可以自己想到这样一个解决办法啊,这解决办法对吧?然后接下来咱们现在这个数据到clean house之后呢,我们现在啊给大家介绍了关于我们这数据接口啊,它的一个发布是吧?呃,那么数据接口发布呢,那其实和咱们前面对在讲日活的时候,对吧,那其实呢,它这个处理就是一样的,对吧,那么整个啊,咱们看一看我们现在这个项目主要看看的项目。
02:15
呃,那么咱们的前面呢,那其实给大家介绍了关于我们现在的这个日活对吧?那么在咱们这个日活里边呢,那我们其实侠到对吧,那么他在处理的时候呢,那也是对吧,那也是我们现在呢,要想处理咱们这个处理的一个过程对吧?是这样的对吧?是这样的,首先呢,我们现在啊吧,这有一个我们这个对吧,这个炸包,然后接下来把这个数据呢,发送给我们现在某一个端口吧,然后接下来我对这个数据的一个处理,对吧?那么咱们现在在我日活这块呢,那其实我给大家介绍第一次啊,介绍我死不人部的程序,那这个时候呢,那有可能你会做这个事儿,就你大数据成员有可能你会做这个事儿,干什么呢?你可能会从某一个地方去取数据,然后对这数据呢,来进行处理,对吧,来进行处理对吧?呃,这块呢,其实主要是给大家扩展了对吧,就是你们现在如果说你们打ND,其实这个其实你们这个应该对吧,这个使用的利率啊,几率不会太大,就说你现在把这个东西给我把做出来,然后呢,还让你做负载。
03:15
才均衡,其实这个呢,我感觉使用几率不会太大,但是呢,让你去做一个对数据处理的两程序,对吧?这使用几率还是比较大的对吧?你可能会和咱们账号成员来进行对接,对吧?那所以说在这块呢,咱们给大家介绍一下,把它介绍一下对吧?然后介绍一下之后呢,注意同学们,那你也得恢复扩展,咱们当时再给你讲这个对接的时候,咱们就实这功能做的比较简单,我这个拿到这之后,我就告诉诉做两件事,一个呢是落盘,一个是往卡卡里边写对吧,那么往卡卡里边写对吧,那么咱们是怎么做的对吧?那这个瓦卡卡写呢,咱们直接使用的是这个spring的封装好的对吧,这卡卡complete,然后接下来落盘的话呢,咱们利用的是我们这个log back对吧,在外面落盘对吧,那其实呢,咱们整个啊,假如说同学们,你们接触到需求之后呢,是干什么,这个数据啊,人家可能对已经处理的很好了,你直接拿过来,直接往elect s里边去放就行。
04:08
对吧,你不要去往什么这些卡卡里面放,你直接往elect里放啊,你直接往click house里边来放,或者你直接呢往MYS里边来放,对有可能让你做这样的需求,那如果要做这样的需求的话,同学们你说我现在开发过,然后呢,你直接上来,直接给你control出了,这个是不不太合适啊,你是不是假如说让你去操作什么买circle啊,去操作什么咱们这个clean house呀,那这个时候你在处理的时候,你这个结构和咱现在结构就不太一样,对吧?什么呢,你就不能简简单单给这提供CR了,然后CR里边直接给捅到咱们这click house里边去了,或者直接捅到ES里,这也不太合适了,对吧,那你也应该怎么样呢?你也应该对吧,这个service你在咱们下面呢,你应该也有咱们这个map对吧,如果说要是操作咱们的clean house呀,或者我们现在对吧,这个。麦菲利克斯其实也行,短贝其实如果说使用菲利克斯的话也行,对如果说基于我们的GDBC协议的,一般你在这里把这map呢也给加上啊,也加上对吧?注意啊,咱们一开始这呢,实际上大家对吧这个写这刚刚接触啊,所以说呢,就一层啊就一层就一杆出来对吧?然后昨天咱们在做的时候呢,对吧,那么这会我在发布接口的时候呀,那咱们现在呢,这个层次分的对吧,就比较全了对吧,就分了我们这个三层对吧,一个呢是表示层,一个呢是我们业务层,还有一个呢是我持久层对吧?那么这个表示层呢,咱们其实主要是接收我用户的请求对吧,然后呢,咱们对吧在这个调用业务层对进行处理,然后并且呢给用户一个这个响应过去,对吧,那么如果大家要对这个了解的话,那我告诉大家一定要掌握这两个东西,一个叫什么呀,一个叫request,一个叫response,就这两个东西啊,你要知道这两个单词是什么,对吧?你要知道这两个单词什么对吧?那么一个呢是请求,一个呢是响应。
05:56
对吧,一个请求一个响应对吧,有的时候他可能诶诶发现给给给你对写这些标记的时候,对吧,他直接写这个request啊,发生个什么请求,Response,给你写一什么数据,对吧,你要知道这两个单词啊,一个request response对吧?那么其实如果说要是没有框架的话啊,咱们现在处理请求,其实这那是比较麻烦的,对比较麻烦的,比如说同学们,咱们现在在请求什么real time,然后杠我们这个total,或者是杠我们这个R的时候,咱们是不是给传参数,如果说要是没有咱框架,咱们框架现在其实是spring Mac它才接受请求的,对吧?那么咱们怎么做呢?那你得去调最原生的request,你比如什么叫get permeter对吧,然后呢,这个方法短说get per by idea对by name这个方法,然后呢,咱们现在把这个请求的数据给拿来啊,给拿来对吧,然后拿了之后呢,然后你来判断一下这个什么类型啊,我做一个转换对吧,就是如果没有的话,这个获取这这个参数啊,这值的方式等你自己来。
06:56
做,但是现在有了框架之后呢,这框架怎么做的,你是不是在咱们这括号里边的方法呢?定一个参数直接接收就行了呀,对吧?哎,所以说呢,这块其实呢,对吧,咱们这个还框架帮他做了很多事情,对吧?那这里我们使用哪些框架呢?我们使用了SSM对吧?那么其中呢,这个S呢,你可以把它列解成spring,那spring呢,它的主要作用对吧?其实呢,主要是做的我们IOC啊,他说提供两个啊,一个IOC,一个是AOC,那么咱们这会呢,其实是用的我们的IOC啊,控制反转,用我们的spring框架帮助我们来维护我们对象以及对象之间的关系,对吧?IOC叫什么?IOC叫控制反转,反转的是什么?反转的是对对象控制的权利,原来这权力呢在程序员上,然后后来呢,咱现在把它交为容器,让容器来帮咱管理我们对象的创建以及对象的关系,那么这个S呢,它对吧,就是我们这个spring MC,这个spring MC呢,它其实是位于我们表示层的框架,等于说其。
07:56
出请求,进入请求对吧?那么你得对请求进行封装呢,对吧,你得响应响应,那么你得响应做一个处理对吧,咱们在这里响应的,比如说我要是object的话,对吧,我如果想object的话,那么人家的底层都在帮你把这object转成1JASON格式一字串给想一回去,谁来做的就是咱们这个对吧,这个spring VC,像spring VC呢,那大家以后啊,如果说你们在这个短这个这个工作过程中,如果用的多的话,大家可以关注一下短信这个框架呢,这种框架它比较适合什么?这种框架它比较适合跟踪源代码对吧,就是咱们现在一般呢,这个就是如果是Java或者说咱们现在对吧,这个一般啊这个说什么培训对吧,那么他呢都喜欢把这个spring Mac对吧,他源代码都要跟一下,这种源代码跟起来,比咱们跟这个Spark源代码要爽多了,对吧,Spark源代码你再跟的时候,这个时候呢,你不太好去找这个东西流程怎么走的,对吧,你只能告诉你我说现在代码到这儿了,然后你点这个类,然后你们跟进来了。
08:56
对吧,但如果说我现在要SPAVC的话,那么因为它本身是流程框架,对吧,具体怎么走的,怎么走的,这一步一步的其实是比较对吧,这个比比较清晰的啊,比较清晰的对吧,这是白C,然后接下来那么咱们这里还有一个框架,这是谁呢?My bet,那my bet呢,它其实主要呢,是位于我们这个持有层,它的一个持有的框架,对吧,它呢是一个半OM的框架,对吧,什么叫半orm对吧?那一看OM本身呢,说对象关系映射呀,对,那么这个半orm它指的是什么?它指的是并不是说我直接对吧去调对象去操作你关系数据库了,你现在要想操作关系数据库,那么circle口咱们是不是还得自己写对吧?只不过咱们circle口呢,它并不是嵌在我的账号代码里边,而什么呢?而是单独的配置文件对吧?那关于我们这买bety的使用,那大家想一想,昨天咱们在我们这个开这个编辑我这个发布接口程序的时候,如果要想使用我们这个MY,咱们大概的步骤是什么样的?首先第一个咱们定一个接口,对这个接口呢。
09:56
啊对,为我们这个map下边,然后呢,在咱们接口里面定义抽奖方法对吧?按照以前的思路,这个接口呢,咱们应该去定义类,然后对接口进行实现,但是如果要使用我们的买的话,是不是不需要定于某的接入时间内,对吧?那么如果不需要第接入时间内,那么是这个接口不需要实现嘛,那不是导致个接口呢,它也需要实现,只不了实现谁帮他做的,来be导他底层帮他做的,那么他怎么帮他做呢?你要想让帮他做的话,那你必须得给当前这个接口提供一个映射文件,这个映射文件到底放在哪对吧?那么在我们这个spring book它的配置文件OB practice里面,那你可以指定咱们映射文件它的一个路径,对吧?那么映射文件指定完之后啊,映射文件指定完之后,那么接下来,那么在我的一个文件里边呢,那配置的时候有一个需要注意的地方,那第一个,那么在映射文件里边有一个map标签,在map标签里边有一个叫name space这个属性,对吧?那么这个name space属性呢,它的一个值应该。
10:56
和我们这个接口它的一个权限内名保持一致,这是第一个,那么第二个呢,在咱们映射文件它的map标签的内部有它子标签里边,那么有我们常用的一些对数据库的增删改查的一些操作,对吧?那么咱们现在呢,在执行我正来给查操作的时候,对吧?那么它里边都有对应的标签对吧?比如insert update delete的什么s select对吧?那么答出去成员那么用的最多的,那肯定应该是s select居多啊,S select居多,那么咱们在使用select标签的时候呢?那么其中它有一个属性叫ID,这个ID对吧?那么它有要求它的值应该和我们接口中方法的名字呀来保持一致,呃,接口中方名字来保持一致,然后具体你要怎么查询对吧?这个思口语句该怎么写,你应该写在那个标签的标签体里边,对吧,那么同时呢,在咱们这个标签里面,那它有一个什么呀?有一个返回值,对那返回值呢,可以怎么指定呢?那么如果要是单个值的话,咱可以通过type来指定,对吧?如果说你现在想对咱们的返回值段做一个短特殊处理的话,那可以通过map来自己。
11:56
定义一个杂志类型啊,来自己定义法类型啊吧,然后接下来那我现在有接口了,有我们现在的这个映射文件了,对吧?那我怎么样去找到这接口呢?你要想让咱们spring手机找到你现在这个接口,那么你需要在spring的启动内上配置一个叫map sc对吧,这样的一个注解,在注解里边呢,有个叫base package这样的一个啊,这样的一个属性,然后在这里你指定我们现在这个接口啊,它的一个我们现在的的一个包名,对,注意原来在咱配置文件里面是不是接口权限地名啊,对吧?诶就是包括包名加类名,但是咱现在扫描的时候,它只是配置到哪配置到咱们那个包名叫base package对吧,叫base package,然后接下来,那么咱们现在呢,在这里对吧,就可以编写我们的me层,编写我service层,然后编写我们的control层,对吧?编写完之后呢,咱们通过我们对提供的可视化程序对来对他呢来做一个展示,对吧?这个呢,是我们昨天呢做的第一个对吧,这个过程对吧,同学们跑通了吗?
12:55
就是你们看到效果了吗?就是从咱们的clean house里把数据拿到,然后呢,发布咱们的数据接口,然后在访问的时候呢,你可以在咱们这个浏览器里边看到效果,整个这个流程,这个数据金融发布成功了嘛,对吧,没关系啊,成没成功的,今天我让你们做一下,算是一个考试是吧,因为还有一个功能特技有俩是吧,我讲一个,然后呢,等你们做一个啊昨天的我讲了,今天这个数据接口发布和昨天一模一样啊,基本上是啊,基本上一模一样对吧,我看一看效果怎么样,然后接在咱们发完数据接口完成之后呢,那么咱们现在啊呃,又有一个需求,又有需求什么呢?其实这个需求呢,那只是我其实可以理解为一个扩展,对吧,说我们现在呢,是ADS层它的一个聚合对吧?ADS聚合对吧?呃,那么咱们像A和聚合呢,那你首先你得知道ADS一般它里面放的是一些什么对吧,一般呢,放的是一些聚合数据对吧?那么这种数据一般是给谁的呢?是给我们这个短报表的短这些报表来看的,短信报人看的对吧?就是我现在呢,这里边我可能什么呀,我可能需要一些。
13:56
的汇总数据,这个呢,它的一个的这个聚合力度就比较大了啊,就比较大,然后呢,一般是我的公司啊,在制制定一些我们的发展这个规划的时候,对那根据这些数据对吧,来制定对吧,那么咱们现在这里是有很多指标对吧,比如说热门品牌呀,热门商品呀,对吧,这品类呀,而且这些啊同学们它都是什么,它都是实时的,和咱离线不一样,对吧,离线的可能是我现在统计一下上个季度对吧,这个商品的热门的这个统计对吧,咱们现在不是,咱现在如果要统计的话,这个热门对吧,它随随时在发变化的对吧,比如说我现在这个采集周期对吧,它的热门商品是这些,然后这个呢就发生变化对吧,每一个小时到每一个采集周期,它其实呢,都不一样对吧,都不一样啊,所以说咱们现在的数据处理方式啊,和原来不一样了,对吧,那最起码的再给大家扣一个主题对吧,咱们第一天呢,再给大家讲的时候,我们说我们这个呢是实时项目,我们这个呢是时项目,然后呢,上个阶段大家做的是我们离线出仓的离线出仓,然后记着昨天有一个又问我问。
14:56
对他呢,对是准备去面试对吧,准备面试,然后呢,呃,别人朋友给推荐了一个,推荐了一个对还比较大的一个,对这个公司对吧,算是二线大厂对吧,然后呢,这个面试的这个把简历一放,然后说这个面试说诶这简历不错,然后呢,适合我们这个公司的现在数据平台。
15:16
啊,这个比较符合我们现在这个数据平台这块是吧,然后后来就不明白,感觉特别虚对吧,这不明白啥叫数据平台呀。啊,啥叫数据平台啊,他说他他然后那个就是那个那个收到简历的人说,哎呀,这个简历比较适合我数据平台,结果这个写简历的人不知道自己的到底适合啥呀,对吧,分什么适合平台,我适合啥我适合啥呀,对吧,所就比较虚对吧,其实注意啊,同学们,像咱们这个数据平台呢,其实只不过是一种称呼,对你们书仓,你说可不可以叫数据平台,对吧,其实也可以嘛,对吧,其实只不过一开始在早的时候没有你们书仓的概念,对吧,可能就是什么,可能就说我现在其实这个数据平台的概念比在出仓推的要早啊,这要早对那个时候他可能就什么,哎,我现在呢,对吧,我可能就是一些关于数据库,传统就关于数据库,然后在这里呢,我这得可以做一些我们的分析对吧,但是后来呢,传统的一些关于数据库,光做一些存储对吧,简单的分析这个满足不了,后来呢,咱们的大数据来了,大数据来了之后对吧,那咱们可能对吧,这个加了很多技术,比如说或存储的话来解决对吧,原来解决不了,那么这个时候呢,咱们可能对吧,有什么呀,或什么加进来了对吧,然后呢,咱们原来的。
16:26
些我的分析计算对吧,那么这块原来的传统的写circle口这也不行了,对,那么咱们可能呢,会加入一些我的分析计算框架对吧,然后后来呢,再咱这里边对吧,可能操作什么卖对不太好,然后你是什么have对吧,然后做什么离线统计对吧,整个咱现在这一套对你们做这个东西包括什么离离线呢,包括什么实时啊,像这种的其实都可以什么呀,叫数据平台对吧,其实咱们现在这个数仓啊,不仅仅单是仓库嘛,对吧,它其实更是什么呀,是不是一个我们的数据的存储分析计算对吧,这样的一个平台啊对吧,所这块比一下对吧,然后咱们现在呢,做的这些统计呢,我们以讲课的时候呢,我们就统计论文品牌,但是呢,其实以下去可以的这个感兴趣,把这些东西都列一下,对,因为像什么咱们商品的品类,对,然后呢,这这个这个商品,然后呢,咱们这个交易户的性别年龄段,这些是不是咱们在做我们这个订单和订单明细维度的时候,咱们特意给他关联进来的,对吧?所以说这些东西你都可以统计对吧,你都可以统计对吧?呃,那么具体咱们在。
17:26
这个实现我的业务的时候,对吧,那我现在要想统计,那你要把这个数据写到哪呢?对吧?那我分析了说本身啊,那我现在在这里,我呢已经把数据写到我们肯定HOUSE1份了,对,已经写到可林house,那你可以在可林house里就做分析,但同时呢,那也可以这样对,比如说这个可林house他项目组他主要做可视化的,然后还有一个我现在呢,我还有一个项目组,他要干什么,他主要呢去做ADS处理呢,对吧?那么这个时候你你可以把咱当前的这个数据给谁呢?给咱们这个as这这这个项目对吧?给他拿一份,那么如果给他拿一份的话,那这个时候你再往那house转,这样呢就混一块了,那不好怎么办呢?你可以在咱们这里边再做一个分层,对吧,再做一个分层,那么怎么分层呢?我现在已经啊从DWD层把我们现在双轮状的数据对吧?哎,把这两个数据给拿过来,然后进行双轮状了,那么这个时候你可以把双轮状的数据再给写回到我们的卡普卡,然后呢,作为我们的DWS层对吧?那么如果把数据写回到卡卡的话,那我现在要往那ADS层写,那怎么办呢?那你肯定要从卡卡里。
18:26
说就给读出来啊,你肯定要从卡卡里面读出来,那么咱们现在谁在读呢?那因从卡卡里读数据,那么咱们现在的这个数据呢,那肯定源源不断的变化对吧,那么咱们肯定我们这个对吧,当前我们这个实时处理框架对吧,Spark推理,那么我们现在从卡卡里把这数据读到之后,然后接下来写到我们这个啊吧,这个ADS,那这ADS我们选谁呢?选买circleql,之所以选买circleq,注意啊,不是说老师这个业务使然,必须到这儿,你得用这个买circleq,不是同学们,对,就咱们现在在这里,你看我转一圈啊,我们现在啊在这里我转了一圈,我们在这个从卡卡这个处理这个读数据,然后处理完之后,那么这个时候我们可以做分析,分析计算,那么咱们分析计算一般我们是不是都把它放到我们这个波然AP对吧,这样的一个我们这个分析平台上去啊,那这个平台大家想一想ES这个算不算。
19:15
对吧,这个东西是不是我们现在的一个op是吧?对吧?然后接下来那咱现在除了我这个东西之外,这格林house是不是也是啊对吧?哎,这个东西呢,也是我们现在呢,它的一个o lap对吧?Op短,其实这个东西呢,这很多对咱们只不过呢,给大家多介绍技种形式,那我现在这种选我们得买搜狗数据库,我的原因是什么呢?原因是我们在给大家介绍我们现在对卡卡数据啊进些消费的时候,那么一定要保证它的一个精准,一次性的问题,对精准的消费的问题,对吧,而且呢,呃,这个精准消费啊,那么我们说你得对卡不卡呢,得有一个了解,对吧,那么卡卡其实在咱们面试的时候啊,同学们这个现在还没过,对,就是面试的时候,卡夫卡他其实问的东西还是比较多的啊,卡卡问的东西还是比较多的,对吧?那么另外一个呢,咱们这个有的时候have对吧,他有一些circle对吧,那么大家也得好好看一看,对,就算你们不想做离线的事儿对吧?但是一般在面试的时候肯定会有一些circle对吧,大学据程序啊肯定会有啊,肯定会有。
20:15
对吧,那么咱们现在呢,我正是讲这个内容是什么呢?就是我们在对卡卡数进行消费的时候呢,那我们说要保证消费的基准一致性,那么如果想保证消费的基准一次性的话,那么这个时候呢,咱们有两种方式对两种方式对吧?那么咱们对这个图啊,那曾经咱们给大家画过对吧,说哎呀这个怎如果要是消费的话,那咱们现在会出现什么情况呢?一个叫做at most mass,一个叫at least mass,对吧,一个呢是至少一次,一个制作一次对吧,那么有可能会造成数据丢失以及数据重复,这两个情况都不想要,我就想对吧在这里对吧,正好对吧,来一次对就来个精准一次性啊,来精准一次性对吧,那么这个精准一次性,对,那咱们怎么来处理呢?对吧,第一种方式咱们已经用了很多遍了,对吧,第一个手动没有这个偏移量对吧,这个偏移量呢,不要让它自动提交,咱们的手动提交,然后接下来是不是咱们现在要保证的命名性啊,对吧?那么大家现在一定要弄明白,说老师我为什么手动提交呢这个东西对吧,那你再看一看这个理解怎么样了。同学们之所以。
21:15
产生精准一次性的吧,这个问题的,就是我现在这个丢失数据,或者说咱们现在的这个数据重复的问题,什么原因呢?是不就咱们现在在这里,我这个偏移量提交的时机我不确定啊,对吧,就是如果说他自动提交的话,这东西到底什么时候提交,你业务处理完了吗?都要给你提交,你不确定,有可能提交的时候业务还没有处理完,对吧?那你想想,如果说业务还没处理完呢,你现在已经提交了的偏移量已经提交了,但是这个时候呢,我业务还没有处理完,那这个时候那肯定会出问题了,对吧?那么如果说我现在到这儿装宕机了,会出现什么情况,丢了呗,对吧,所以是丢了对,如果说我现在呢,在到这里边,对这就完事了,那这块呢,没提交对吧,那这个时候再来是不是重复了呀,对吧,所以说我现要解决的话,那应该什么,那应该是把这个偏量的自己来维护对吧,那么咱原来第一种方式偏量维护到哪了呢?维护到我们这个啊这个RA里边对吧?那么另外一个呢,咱们现在要保证我的密等性,保证密等性一般怎么保证对吧,大部分情况下数据库本身对吧,一般可以去这个保证密等性,但是也有一些情况保证。
22:15
数量。比如说我们现在数据库要使用click。对吧?格列号能保证的命令型吗?对吧,这个时候保证不了啊对吧,因为他虽然说用primary key主键,但是这个主键呢,它只是对这个建立一级索引,对吧?它并没有说这个对吧,唯一性对吧?它这个主件呢,并不具备唯一性对吧?呃,那我现在呢,这个除了第一种方式之外呢,那我今天给大家介绍第二种方式,对第二种方式什么呢?就是你现在啊,把这个数据从这里读出来了,那读出来之后呢,那你要对这个数据进行处理,然后呢,同时要自己提交偏移量,对吧?那我现在要干什么呢?我现在要把偏移量提交和数据处理啊这个方式对吧,这个是提交偏移量对吧?这个呢是我们现在这个处理数据对吧?这两个操作呢,我放在一起,放在哪?放在同一个事物里边啊,放在同一个事里面啊,放在同一事物中,然后接下来,那么如果放在同一个事物里边,那么它的特点那就是原子性,要不然同时成功,要不然同时失败啊,要不然同时成功,要然同时失败,那么如果你要使用事物啊这种方式来保证我们这个精准的消费的话,那么要求那你在去处理数据的时候。
23:19
这个数据是不是应该保存到关系数据库里边,支持事物的关系数据库里边对吧?然后呢,那提交往下偏量是不是也应该往这个数据库里也保存呀,那这样的话他俩才能把完保证一个什么这个事这个这个什么对吧,这个在一个事物中嘛,对吧,在一个事物中对吧?那么咱们现在呢,这里同学们,那我先要支支支持我的事物,那咱们现在选什么呢?MYS,其实选my circle,那么咱们最大的一个,我们这个谨慎点就在哪呢?就看一看它能不能扛得住对吧?那么对于我们现在ADS数据这个东西,那其实是不是应该是聚额后的数据对,比如说我现在求的品牌对吧,它的一个对吧,这个总量其实这个事呢,那应该数据量不会太大啊,数量不会太大,说老师频繁要五秒钟一次,那五秒钟一次,如果买次我扛不住的话,他也不好意思要数据库是不是啊,如果五秒钟请求一次,他还扛不住对吧,那这个东西对吧,那他也不可能就是现在这是用的这么火了,对吧?所以说这个东西呢,咱去想啊,说无脑力次是不是扛不住,对吧,这不会的啊,这不会对吧,那么咱们现在呢,那如果要使用它的话,其实呢,我们在。
24:19
在处理的时候啊,还有一件事对吧,这个呢也要考虑啊,考虑什么呢?说大家想一想啊,我们现在呢,再去比如说呢,我现在去保存数据啊,或者处理数据,那么咱们在处理数据的时候呢,我现在是不是写的是我的SPA程序啊,那么写SPA程序,那么咱们这里有两个重要的角色,一个叫driver,一个叫itco,那么咱们都知道我这个driver呢的这个算子之外的代码,然后咱算子相关代码都在哪呢?都在exq来执行啊,对吧,那你想一想,那如果说我现在要处理的话,对吧。那么假如我现在有百条数据,那么可能这个就呢处理50条,然后这个呢,那处理50条,那咱们现在呢,要保证我们现在呢,这个事物在一个里边对吧?那你想一想,我在处理数据的时候,那我可能这个A执行完了,但是这个课你能保证执行完了吗。
25:10
你在处理事物的时候,你是不在考虑这个东西啊,对吧,你在考虑这个,这叫什么呢?这叫分布式事物,就说我现在啊,别看我这里边保存的,诶我看我直接调一什么什么算子,对吧,然后对这数据进行处理,但是呢,我现在这个算子在执行的时候,它是分布在不同的节点上进行处理,对吧?那既然你要保证原子性,你是不是应该保证我每一台机器上的咱们现在这些东西,对吧,我这个真正的是不是都正正常执行啊对吧,分布式处理,那么咱们真正在处理的时候,一般呢,还有专门的这些框架,这些这种框架对吧,就专门处理我们分布式事务的,对吧,但是呢,一般企业都避免的对吧,就是如果说实在避免不了,可能想专门解决方式,因为增值处理这个东西呢,倒比较麻烦,倒比较麻烦,那么对于我们来讲,其实我们可以取线,就我。对吧,可以取就播怎么做呢?我现在本身我这个东西是不是在我们这ex库上,那我可以怎么办?我可以把它拿到咱们这driver端来呀,对吧,拿到driver端来,那么如果拿到driver端,咱们driver端是不是现就一个节点,然后接下来咱们对driver的数据呢,进行操作,怎么样把咱们这个A块数据拿到driver端呢?啊,Collection是不是可以对吧?Collection是不是可以呀,Collection来做一个收集嘛,Collection来做一个收集对吧?但这样的话,那他面临的风险就什么呀,是不是这个数据都比较大对吧?但是咱们说了这个数据不会太大的啊吧,这个数据不会太大对吧,就咱们现在ABS这的数据不会太大对吧?所以说呢,到时候我还可以考虑这个,对吧,把这个数据呢,我需要聚合到咱们这个对吧,这个JA端啊,就要这转好了,这是咱们现在呢,昨天的一个回顾,以及呢,我们对吧,大概这个接下来要做的事对吧?呃,代码写在哪的呢?来看一看,我们现在呢,来到这里啊看一看昨天咱们代码到哪了。
26:59
那么昨天在咱们order外里边啊,那我们现在呢的这个已经把这个数据啊给写回回去了,对,已经把这个数据呢,写回到我们这个卡卡里面去了啊写的卡卡,那么写的时候呢,咱们这里又给大家讲了一个知识点什么呢?就如果说啊SPA traininging对吧,来处理我们这个卡卡数据对吧?那么咱们现在呢,在处理的时候呀,大家注意啊,如果说我现在数据来源啊是卡不卡的话,那么只要是行动上的被触发了,那么这个时候你应该养成一个习惯,如果后续啊,你还要对咱们这个数据进行操作,那么这个时候你应该把它给缓存一下。
27:36
对吧,你给我能缓对一下,这东其实也很好理解,同学们,为什么呢?大家想一想,我们在腾序执行的时候,我们首先要看到干什么,是不是读取分析数据呀,对吧,你程序运行,你现在看到诶读取分析数据对吧?那么读取分期数据其实在哪呢?是不是在咱们这里边,我要从咱们这个对吧,获取偏移量,然后在咱们这里边,它是不是有咱们对应的读取分离偏量啊,这样的一个方便这个输出啊,对吧?那也就是说我现在呢,在运行的时候,它会读取偏移量,读取几次同学们。
28:05
这个偏移量咱们读取几次,是不只会读取一次呀,对吧?不像咱们这个保存的时候,对吧,就每一个采集周期对吧,咱们在这里在保存偏移量的时候,它都要执行一次来保存,对你看咱们这里啊,每次在咱们执行的时候,对吧,每一个采集周期他都要去执行一次,咱们得保存对吧?但是他读取的时候呢,对吧,咱就一次啊,就一次,那也就是说我第一次啊,只要成运营的时候,我从咱们现在的这个red也好,或者说买S也好,把这篇量呢,给它读出来啊读出来,那么读完之后呢,那以后我再去读的时候,我就直接对吧,比如说第一次我的3U7,我现在呢,这个偏量从零到十了,我下一次我还会从这里再读偏量吗?不会的,对吧,他直接从咱们十对吧来开始读了,第二个采集周期就是从十开始读了,对吧,它本身可以记录这些东西对吧,所以说咱们现在在执行的时候,对吧,在这些时候,那如果说我现在呢,这里边对P量提交了对吧,那P量这就入入果说我当前这个个stream提交了,那么提交完之后呢,那么这个时候我下边这个RDD啊,或者是咱们这stream它。
29:05
是不是从头对吧再去读啊对吧,但是在读的时候对吧,那么咱们现在从哪读不是从头了对吧,它是从我们现在最新的偏量位置读对,那么可能读不到数据对吧,那么所以说呢,如果数据源是卡卡的话,尽量对吧做一个我们这个对吧,做一个什么呢?做一个我们现在的一个catch对吧,但有的时候对吧,像假如说要单流的话,对吧,有些场景对吧,它呢会对我们的RD呢,它会自动的对吧对咱们2D做catch都要做缓存,但这个呢,对吧,其实呃这个看好这个阅读好多次啊,这个东西的catch的时机他不确定。啊,这K不是百分百开始对吧?好了,那么这块呢,大家知道一下,然后接下来昨天咱们把这数据写的卡法之后呢,然后我们又封装了两个工具类,对吧?那么这两个工具类呢,一个是我们这个MYSL它的一个连接对吧,这个MY斯L连接工具类我说一分钟把它写完,主要是从哪的说从我们这个菲尼克斯工具类给复制过来的,对,因为它也是基于我们的JDPC,对吧,来对我们的数据库呢,来进行操作,整个的套路都是一样的,利户注册驱动,建立连接,创建数据,操作下STEM的这接思索语据处理接收机,最后释放资源,对吧,都是这些步骤,对吧?然后接下来咱们创建这工具的目的是干什么的?对吧?因为你现在呢,对吧,这个要把咱数据就这两个东西啊,你要保存在咱们这个MYS里边,所以说呢,那么咱偏量肯定也在my sol里边,那么既然在MYSO里边,你是不是要从my sol里边把这偏量给读出来呀,对吧?那么咱们呢,也分装一工具类叫outside manager对吧?M,那么这块呢,它是主要从my soq里边来获取我们偏移量,那么这里有些同学可能会有问这个想法。
30:38
是老师你少做了一个功能对吧,咱们现在有get outside,然后你没有写save outside。对吧,是不是没有写C对吧,什么时候写Co side,注意同学们,这个东西不应该写在这。在保存偏量的时候,不应该写在这对吧,这个保存它应该和什么,它应该和你的业务处理对吧,它应该和你的业务处理对吧,这个保存偏量的操作啊,和你的业务处理,它应该在同一个五这事务中对吧,所以说你在处理业务代码的时候,咱们呢,再去保存对吧,这就OK啊吧,这就OK对吧,好了,那咱们现在呢,这个代码呀,这块代码大家呢下去对吧,根据自己的情况对吧,根据自己情况对吧,不要光去看运营效果对吧,一定要对吧,这个在写代码的时候,最近毕竟啊,这个不大不小也算是项目,短不大也是项目,那么一定的要从咱们的项目中有些收获,不管是你的业务逻辑上,还是你的代码能力上啊好了,那咱们这块呢,我稍微停一下。
我来说两句
6
666