00:00
所以现在我们的这一条数据流就已经打通了,就相当于是在这个卡卡STEM这里边,我们接收到数据之后,经经过处理,拿到了标准的评分数据流,然后把它这个发发放到这个topic是recommend这个topic里边,那么在实时系统这里边就可以直接接收到,可以做计算了啊,这一部分就完全已经打通,然后接下来大家会想到,那你之前的东西又从哪里来的呢?对,大家会想到这里边我们不是在application里面定义的时候,它的from from是一个叫做log的topic嘛,所以大家会想到我是不是应该从from那里边定义一个卡卡think,它叫做log topic叫叫做log啊,所以接下来我们要做的是去配置卡夫卡。呃,配置对吧,所以大家来看一眼我们这里的这个文档吧。
01:03
呃,这里边我们主要是什么东西呢?呃,就是在这个。Con目录下边去新建了一个配置文件,然后这里边就定义出了他的,呃,各种各样我们想要的东西啊,这里面我还是直接在我的这个。环境里面给大家看一眼吧。好,我们进入到里边来,去看一眼,呃,应该是config目录下边的。叫log。卡夫卡这样一个文件。大家能看清楚吗?大家可以看一下在这里边所有的这个定义,我本身的这个agent的名字应该叫什么呀。对,就叫agent对吧,所以说就叫agent,然后我定义了一个source。叫做对EXEQ啊,那大家会想到,呃,接下来我这里边它的type是什么呢?EXE要去执行一条命令对不对?呃,那么然后它的command是什么呢?对,大家看ta-F,这是不是要监控我们对应的那个日志啊,然后我这里边的这个目录就应该是对应的业务系统写入日志的那个文件目录啊,所以大家如果要是自己去配置这个文件的话,可能要把这个目录要改一下啊。呃,然后那么下面大家看到还定义了哪些东西呢?诶,这里边是不是定义了我们对应的这一个,呃,这里还定义了它的前缀对吧?这里定义了一个正则去做这样的一个filter,那然后大家会看到这里是S,那么后边这个S会放到哪里去呢?
02:49
是不是卡夫卡think啊?定义了一个叫做卡夫卡think的东西,它的type是flu think,卡夫卡think。那么这里边我们要去配置它的topic是叫做log,然后boottra server是logo host 9092这些,大家把这些配置大概的看一看,这些东西你如果要改的话,可以把这些对应的地方做一个调整,那至少这个日志的目录肯定是要改的,对吧?呃,这部分大家看一眼就可以。
03:21
呃,然后这一部分东西如果说我们已经都配置好的话,大家会想到接下来就应该去启动form了,那这里大家要注意我我这里边既然监控了那个文件,那那个文件是不是也应该得有啊啊,要不然的话,你肯定就是没有这个来源嘛,你source根本就就执行不了,所以这里我们是直接把这个业务系统代码可以直接copy过来,放到这个目录下面,下面来这个business server,叫做business server这样的一个呃子模块,那么这个模块大家看添加进来之后,直接复制过来之后呢,好像长得跟recommend不一样,对吧。
04:03
这代表什么呢?为什么呢?对,因为我们只是把它复制进来,那没项目并不知道它,它已经是一个子模块了呀,啊,那我们看一下他这里边的这个po文件里面的配置吧。呃,大家会看到,诶,我这里明明已经把这个添加进来了呀,而且这个名字好像也是对的,1RECOMMEND recommend system跟我们这里面的副项目是一致的,对吧?呃,但是大家会想到你这里边有了parent。但是我parent这里面是不是并不知道有你这个子模块啊,所以这里面大家注意一下。添加进来之后,还要去加一个module,呃,对,叫做business server,把它添加进来,那如果这一部分已经被没问管理起来之后,它就是我们同样的一个子模块。可以去直接在这里做管理了,呃,接下来大家看一眼这个业务系统的这个代码结构大概是什么样的吧,SW下面有这么几个文件夹,呃,那别的都不用说,这个Java下边是不是肯定就是啊主要的源代码对吧?那我们这里面可以给大家看一眼,呃,就是这个请求都是rest请求的方式发过来的,那比方说我们看一眼这个product rest API。
05:23
前端发送请求的时候,是不是就会调用到这里来啊啊,那这这里大家看一下处理这些请求,大家看有这个hot对吧?Rate,这是打分最多的商品,然后我们想看的是什么呢?给大家看一眼这个rate rate是表示后面跟上一个ID的话,表示对这个商品要去做一个打分操作,然后大家看下边就会有一个什么呢。有一个买点日志,呃,所以前面不是跟大家说有一个这个前缀要写进去吗?在哪里写进去的呢?啊,我们这里用log infer的时候,直接就加了一个这样的前缀product,然后后面的结构怎么定义的呢?呃,User ID对吧?竖线ID,呃,然后呃,当然这个ID,这应该是我们传进来的那个product ID对不对?呃,大家能想得到,然后后边score get score对不对?最后还有一个大家看这是不是时间戳啊,除以1000就是秒数的那个时间戳,诶,所以。
06:30
大家想如果我要改的话,能不能改呢?啊,你可以把这个业务系统代码里面改一改,然后我们后面的那些处理的操作对吧?过滤的操作对应的也也就都应该做相应的调整,这是这一部分啊,就简单给大家看一下,然后知道是什么就可以了。呃,除了这个Java目录之外,这里还有一个log,大家注意一下,这里放着的是不是就是我们真正要去写入log的那个文件目录啊,所以大家看啊,这个文件一定是要放在这里的,那么。
07:04
业务系统怎么知道他的log往哪里写呢?这是在哪里配置的呢?当然是在log for proties里面配置的,大家看我这里边是不是有一个叫做log for这a panda.file啊,对吧,一个文件的这个输出的一个呃,这个目录,所以大家可以看到在这里边我定义的路径其实就是当前business下边,呃,S main log下边的agentri简log,有了这个配置之后,我这里启动业务系统,呃,提起这个服务器来,它对应的log,我们所有的操作发过来之后,买点日志就就都会写到这个里面去。呃,那大家会想到,然后我们在flu这里面是不是应该监控这个文件啊,呃,对,所以这里边大家会想到里面配置的那个目录应该跟这里边是一样的。呃,大家在把这个业务系统代码拷过去之后,这一部分,呃,这个目录是要改的啊,大家要注意一下这部分。
08:06
好,已经有了这个业务系统代码之后,我们就可以启动这个了,呃,启动的命令。呃,B应该是from n对吧?呃,那么agent我们这里面用到的其实就是我这里直接copy这个文档里面的内容吧,这个大家应该都很熟了啊。呃,就我这里边杠C指定它的那个,呃,配置文件的目录对吧?然后指定对应的配置文件,杠N本身的name是不是就叫做agent?呃,然后后面还有这个,呃,Java启动的时候的一些这个log的配置好。所以我直接把这个。好,Agent把这个copy过来好起一下。好,然后我们这里把业务系统提起来,那在开发环境里边怎么起业务系统呢?那最好的方式当然是你把它打个包对吧,然后丢到这个,比方说top cat,呃,或者web fair,把它这个放到对应的那个目录下面去,它自动外部容器把它提起来就好了。那我们这里边,呃,你你如果不想那么麻烦去打挖包的话,这里边我们可以用这个maven projects下边的对应的这个插件去做一个处理,我这里先刷新一下,诶,大家看多了一个business server啊。
09:28
我这里边在他的这个插插件管理里边。大家会看到多了一个什么东西呢?对TOM7,呃,所以其实我直接可以用。已经定义好的,已经插入进去的这个插件去做一个启动,那我可以直接双击TOCA7RO,然后把这个业务系统提起来。呃,现在大家应该把这个完整的数据流程应该能够串起来了,我们这里边提起来之后,在业务系统的代码里边。
10:03
我们后台有一些买点对吧,这里边如果做了对应的这个买点的话,有前端的这个请求来了之后,调用到这里,对应的这个请求发过来,我们执行的时候调用相应的服务,然后在这里做这个买点日志的写入,写入之后前面加了这样的一个前缀,而且数据格式已经定义好,那么对应的这个log文件里边就会多出来一行,然后我们flu里边配置了它的source,我们是要去。就是跟踪这个文件变化对吧?呃,要要Q-F这个文件的变化,所以它一旦增加一条数据的话,我们就可以把它的那个变化提取出来,然后通过里边定义好的这个卡夫卡think是不是就可以传输到卡卡那里去了,然后接下来在这个application里边,我们又定义了那里出来的卡think topic叫log,我们这里经过处理之后呢。
11:02
输,输出的叫recommend,呃,从这里出来的数据就可以给到my recommend recommend,我们的推荐模块里面获取这个评分流,然后做处理,写入到数据库里面了,完整的流程就就这样就跑起来了。好,我们看一眼这个这边应该是,呃,大家看应该正常提起来了,对不对,呃,然后我们这里的业务系统也已经提起来了,大家看他的那个端口是什么呢。8088这个就是我们有有那个配置啊,就是给配置端口是这样,所以接下来我们可以在浏览器里边去做一个访问。LOCALHOST8088。呃,那大家看一开始这是一个登录页面了,我们因为一上来之后没有用户,所以我们先去做一个注册啊,啊这个大家就随便写,比方说我这个ABC123。
12:00
注册一下,呃,接下来我们就可以去登录了。诶,大家看登录进来之后呢,页面里边直接就显示出了这个热门推荐,就是统计相关的一些推荐。但是为什么没有实时推荐和离线推荐呢?啊对,大家会想到这其实这就是一个冷启动的问题了,对,因为一开始如果一个新用户刚刚注册进来之后,他没有任何的历史评分,对不对?那你这个时候我们离线推荐是基于评分,然后做了英语义模型做了分解,对吧?呃,得到了它的这个特征向量,然后去做的推荐,那么这个过程我们当然是没有的,所以离线这部分就没有,那实时呢,他也要基于我们之前离线得到的那个相似度列表,对吧?所以这里当然也是没有的,那这样的一个过程我们怎么样去处理呢?
13:01
呃,当然就是说其实也简单,比方说我们可以随便点开一个这样一个物品啊,大家看下边,这里边已经有它对应的标签了,但是相似推荐也还没有,因为我们这部分模块还没做对吧?呃,那这里边这里边我们可以直接鼠标上来就可以给他做一个评分啊呃,比方说我给一个五五星啊,当然这里面没有那个其他的提示,大家看已经评完了。这个分数评完之后,我们在这个log文件里面。诶,大家看这里面log已经有很多。大家看log这里面是不是就多了一条这个评分数据啊,呃,评分的log对吧,这里面就已经来了,呃,那大家会想到,就是对应的,我们在其他的地方也应该都可以捕捉得到,呃,我们这里先把这个。单说我这里面已经做了这个评分之后,那我退回来之后就直接能看到了吗。还是看不到,为什么呢?
14:00
因为离线推荐并不是实时更新的,我们之之前推荐出来离线推荐得到那个推荐列表,还有那个相似度列表,是不是基于的还是最初的那个评分啊,所有的评分,我们刚刚做的那个评分是不是根本没有体现在这里边啊。啊,所以大家注意啊,这里边就是你刚刚做完之后,这里其实还是没有东西的,那怎么样才有可能有东西呢。哎,那其实就是这个就就属于什么呢,我们就只有隔一段时间之后,是不是要把这个off recommend程序要对,是不是应该重新跑一下呀。大家想一想是不是这样,因为我们这里要重新读取这个RA数据,哎,大家如果要是不放心我们这个RA有没有的话,我们到网购里面去看一下吧,我们是这个程序员,是所有程序的这个主宰啊,所以一切东西我们都能看得到啊,先去看一下tables,大家看tables里面有什么变化。
15:03
多了一个是不是多了一个user啊呃,这就是我们刚刚注册的这个user,会写到这个表里边,我们看一下这里面的数据吧,大家看这我刚刚刚注册的这个ABC,然后密码是123对吧,那么这个user user ID是叫这个96354,我把它复制一下。然后我想去看什么呢?想去看当前的RA表,RA本身这个表里面的数据是不是都是我们data loader把那个文件里面的数据导进去的,现在我想看它里边有没有我这个user ID对应的数据,对吧?96354,诶大家看现在已经有了。有这么一条评分数据,我刚刚打了一个五星,给57272这一个商品打了一个五星啊,所以已经在这个数据里了,所以接下来我们如果再去跑一下离线推荐的话,我们读取出来的数据是不是就包含我们刚才那个评分在内了啊,这就可以做对应的这个推荐了。
16:06
好,我们先跑一下试试。好,大家可以看到我们这一部分已经重新运行完成了,把这个离线的推荐模块重新运行完成了一下,然后我们再把这里,诶这里边我们首先看一下,就是刚才我们只是在这个日志文件这里边看到了这一条评分数据,对不对?呃,那大家知道到了这个有有了这里来之后,我们是不是还应该看一看卡夫卡和那个实时推荐那里有没有收到这条数据,对吧?好,我们看一下,诶这里边卡夫卡这里是不是也来了一条数据啊,Product data coming对吧?这里来了一条,然后我们看这个online,诶,这里是不是也有一条RA data coming啊啊,尽管这里边我没有显示出来,但是大家知道已经有东西了。这里边。诶,我这里边刷新一下,好,我们刷新之后,大家会看到这里面是不是就有了离线推荐和实时推荐啊,呃,对应的这些东西就已经推出来了。
17:08
那大家如果想看这个mango里边的具体的内容的话,我们show一下tables,大家可以看到是不是stream ras里边确实已经有数了啊,不是那个业务后台随便给我们编的数据,对吧?我们这里面确实已经写写进去数了,那么大家看一眼这个DB stream ras里边放了一下,呃,我们还是pretty啊。呃,大家会看到是不是我的user ID就是我自己啊,刚刚注册的那个user id96354,然后我做了一个点击评分之后,他就对应的给出了这些推荐啊,所以这些对应的商品就会显示在这里。当然大家会发现好像我我前面好像是点了一本书是不是。大家看这个就是基于这个盈余模型,我们做协同过滤分解之后,它推出来的东西好像呃,确实也有书对吧?呃,但是这个大家看,尽管这个好像看起来是一个东西,但是。
18:13
那大家能看到这个这个页面图片是不是不一样啊,所以肯定是两个product ID对吧?呃,他俩其实应该是很相似的一个状态,呃,对,呃,那那另外我们也有这个书相似的一些推荐,另外呢,还有这个,这是相当于什么,这是U盘吗?这是,然后还有这个鼠标对吧?还有这个呃,什么欧莱雅这些洗面乳啊之类的,所以大家会发现这个推荐出来的东西好像不是严格意义上的大家感觉的那么相似,所以他有时候其实是可以会发现,呃,呃,对,就是说呃,有时候如果大家觉得这个推的不好的话,可能会觉得莫名其妙,呃,但是如果说我们数据足够多,足够详细的话,其实是可以推出来,就是说喜欢这些的人往往是有内部的联,有一些内内部隐藏特征的,哎,我们对应的可以把它相关的东西也推出来。
19:09
这就是这一部分内容,大家可以把这个代码好好的实现一下,然后把整个的系统跑起来看一看效果。
我来说两句