一.事件时间
事件时间是每个事件在其生产者上创建的时间。
该时间通常在它们进入Flink之前嵌入到记录中,并且可以从每个记录中提取事件时间戳。在事件时间中,时间的进度取决于数据,而不取决于任何时钟。事件时间程序必须指定如何生成“ 事件时间水印”,这是一种表示事件时间进展的机制。
在理想情况下,事件时间处理将产生完全一致且确定的结果,而不管事件何时到达或它们的顺序如何。但是,除非已知事件是按时间戳(按时间戳)到达的,否则事件时间处理会在等待无序事件时产生一定的延迟。由于只能等待有限的时间,因此这限制了确定性事件时间应用程序的可用性。
假设所有数据都已到达,事件时间操作将按预期方式运行,即使在处理无序或延迟的事件或重新处理历史数据时,也会产生正确且一致的结果。例如,每小时事件时间窗口将包含所有带有落入该小时事件时间戳的记录,无论它们到达的顺序或处理的时间。
请注意,有时当事件时间程序实时处理实时数据时,它们将使用一些处理时间操作,以确保它们及时进行。
二.摄取时间
摄取时间是事件进入Flink的时间。
在数据源端,每个记录都将源的当前时间作为时间戳,并且基于时间的操作(如时间窗口)引用该时间戳。
摄取时间从概念上讲介于事件时间和处理时间之间。与处理时间相比 ,获取稍微麻烦,但结果却更可预测。由于摄取时间使用稳定的时间戳(在源处分配了一次),因此对记录的不同窗口操作将引用相同的时间戳,而在处理时间中,每个窗口操作都可以将记录分配给不同的窗口(基于本地系统时钟和传输延迟)。
与事件时间相比,摄取时