
对时间的处理
|
41
通常还有第
3
个时间概念,即
摄取时间
,也叫作
进入时间
。它指的是事件
进入流处理框架的时间。缺乏真实事件时间的数据会被流处理器附上时间
戳,即流处理器第一次看到它的时间(这个操作由
source
函数完成,它是
程序的第一个处理节点)。
在现实世界中,许多因素(如连接暂时中断,不同原因导致的网络延迟,
分布式系统中的时钟不同步,数据速率陡增,物理原因,或者运气差)使
得事件时间和处理时间存在偏差(即
事件时间偏差
)。事件时间顺序和处理
时间顺序通常不一致,这意味着事件以乱序到达流处理器。
根据应用程序的不同,两个时间概念都很有用
。有些应用程序(如一些预
警应用程序)需要尽可能快地得到结果,即使有小的误差也没关系。它们
不必等待迟到的事件,因此适合采用处理时间语义。其他一些应用程序
(如欺诈检测系统或者账单系统)则对准确性有要求:只有在时间窗口内发
生的事件才能被算进来。对于这些应用程序来说,事件时间语义才是正确的
选择。也有两者都采用的情况,比如既要准确地计数,又要提供异常预警。
Flink
允许用户根据所需的语义和对准确性的要求选择采用事
件时间、处理时间或摄取时间定义窗口。
当采用事件时间定义窗口时,应用程序可以处理乱序事件流以及变化的事
件时间偏差,并根据事件实际发生的时间计算出有意义的结果。
4.4
窗口
4.1
节举例说明了如何在
Flink
中定义时间窗口并以小时为单位生成聚合结
果。
窗口
是一种机制,它用于将许多事件按照时间或者其他特征分组,从
而将每一组作为整体进行分析(比如求和)。
4.4.1
时间窗口 ...