00:00
好,上节课我们把这个flu的south China和S已经确定下来了啊,也就说在本次项目当中,第二级flu这块呢,我们采用的S是卡普卡S。China呢,选择。Think选择think。哎,整个价格定下来了,但是你看我这张图当中还加上了一个时间戳拦截器。那他有啥用呢?之前我们在这个项目架构中,前面这块是不是也用到一个拦截器啊,用到的是ETL拦截器,那这个拦截器呢,是判断接身是否完整。那这块按理来说不应该再加拦截器了。那它有啥用呢?哎,这是一个非常重要的拦截器哈,它是用来解决叫零点漂移的问题,给大家画一张图。把它截出来。这是一个非常经典的一个场景哈,叫零点漂移。
01:00
那这个问题的始末是什么样的啊,你看一下我们这个书上这个架构。然后对应的卡不卡。下面是。然后数据上传到ADPS,是这样一个过程吧。那我们这套书上架构是怎么工作的,我们是这样,比如说我们会把2021年。八月。七日。产生的所有日志。哎,上传到ad上对吧,哎,上传到HDFS。那么好,那a dys它后期怎么说呢?它是2021年。8月8日的时候。八月。班来处理。8月7号产生的所有日志。
02:01
理解一下,比如说在8月7号当天啊,凌晨到24小时之内,所有产生的数据,它都会上传到APS,然后到了第二天,比如说8月8号凌晨一过。是不是他就开始处理8月7号所有产生的日志啊,这样的话我算什么日活呀,哎算新增啊,哎就能是统计前一天所有的数据的总量。是不是期望这样去算呢?OK,那现在来了这样一个问题,在这个2021年。八月。七日。几点呢?23:59的时候,59分产生了一条日志。好,那这条日志等它发送到哪呢?发送到这个room的时候,因为数据传输有延迟,那到这儿的时候已经不好意思。到了第二天,8月8日。
03:03
8月8日,十分钟。到这儿。你传输到这儿的时候就已到这儿了,那么我这个日志。到底应该是8月8号来算,还是应该算到8月9号呢?思考一下。你说这是8月7号产生的日志,理论上来说这条日志我都应该在8月8日的时候是把这些数据处理完呢。但是思考一下。那能不能来处理呢?那我这边存储数据的时候,它这样存的。哎,按照天一天一个文件夹,比如说这一个文件夹呢,我存你的是。分组的8月7日。所有数据。我希望这条文件夹里面存储的是8月7号所有的日志。但是。这条认知。他能不能写入到这儿呢?能不能写入到这个8月7号里面去呢?
04:02
能往这里写吗?因为你传输到这儿的时候,它当前这个Linux的系统时间。已经变成了8月8号。这个a think,它读取的时间是什么时间呢?哎,是当前Linux系统的时间,比如说8月8号,那它就会将这条日志存储在下一个文件夹上。他给我停在这。这里面存储的是八月八。如果这条日志你不对他进行正常的一个控制的话,这条日志你不做控制,他就会写入到这里面去,那这条日志什么时候处理呢?是不是应该是8月9号处理。8月9日。你上条这些日志是不是8月8号处理。
05:02
这样一个情况。那好。那怎么办呢?比如说你会有一部分数据写入到这里面。但是你这波数据呢,明明他应该是。比如说8月8号,我就应该把这个处理处理掉。知道吗?那怎么做呢?这个很重要啊,这是一道非常经典的一个啊,生产环境的问题,零点漂移,甚至啊在阿里的那个大数据之路那本书里面都有详细的一个说明,那本书啊是阿里一六年啊写的。呃,他当时给出的技术方案呢,是这样的,他在这块啊,哎,延迟处理。我接收数据的时候,我延迟十分钟。多延迟一会儿,然后把这里面的数据我再给他,哎,导入到这个8月7号。哎,是这样的一个处理啊,根据这里面的日志时间戳,因为每条日志有对应的时间戳,诶找到对应的创建日志的时间是8月7号的,然后再写回来,哎相对来说比较麻烦。
06:03
那其实呢,这里面随着技术的发展啊,里面有一个时间窗拦截器。他可以干什么事儿呢?我可以呀,把你这条日志拦下来。干嘛取出你这个日志生成的时间。然后写入到对应的指定的文件夹上。你默认是获取linu系统时间,但是我改变了你这个时间戳之后,它就可以获取的是日日的时间。也就说按照你日志的时间写入到指定的文件夹,不按照你当前系统时夹。那这种方式是可以解决掉对应的这个零点漂移的问题。OK吧,哎,那这个原理啊,就是这样的啊,这道题呢,是非常经典的哈,那后面呢,我们在讲这个时间圈拉器的时候啊,会给大家去实现一下。
我来说两句