流数据中有2个时间,1个是程序时间,1个是事件时间
事件时间:事件发生的事件
程序时间:数据被服务端接收的时间
程序时间≥事件事件
例如
某个事件在客户端15点23分00秒发生
数据上传到服务端的时间是15点23分01秒
那么
事件时间=15:23:00
程序时间=15:23:01
数据延时=1秒
一般来说,数据延时不会太大
内网数据传输延时毫秒级别
外网数据传输延时远不达到秒级
多数情况下,延时不会超过1小时
然而某些手机应用
手机在断网情况下操作,数据临时保存到手机
直到手机有网,数据才上传到服务端,程序时间远大于事件时间,甚至延时超过1天
使用Flume把流数据写到HDFS,路径含动态时间(如:/temp/flume/kafka/%{topic}/%Y-%m-%d)
%Y-%m-%d默认会用Flume的程序时间
通常会给Flume配置时间拦截器,使得%Y-%m-%d使用事件时间
Flume有个按时间滚动文件的参数,滚动中的文件以.tmp作为后缀
当%Y-%m-%d使用事件时间,某个2022年7月4号21点的数据在5号3点才到,产生2022-07-04/xxxx.tmp文件
如果HIVE在每天2点执行LOAD DATA任务,数据装载就会不全
通常数据分析允许一定限度的 系统误差
比如,延时6小时执行LOAD DATA任务可得到99.9%的数据,剩下的迟到数据可忽略不计
如果高延时情况下仍丢迟到很多数据,就应优化源头数据采集程序
