flink 事件时间

当流媒体程序在处理时间运行时,所有基于时间的操作(如时间窗口)将使用运行相应操作员的机器的系统时钟。例如,每小时处理时间窗口将包括在系统时钟显示整整一小时的时间和到达特定操作员的所有记录。

处理时间是最简单的时间概念,不需要流和机器之间的协调。它提供了最佳的性能和最低的延迟。然而,在分布式和异步环境中,处理时间并不能提供确定性,因为它容易受到记录到达系统的速度(例如来自消息队列)的影响,以及记录在系统。

  • 事件时间:事件时间是每个事件在其生产设备上发生的时间。这段时间通常嵌入记录中,然后进入Flink,并且可以从记录中提取事件时间戳。每小时事件时间窗口将包含携带落入该小时的事件时间戳的所有记录,而不管记录何时到达以及它们以何种顺序到达。

事件时间即使在无序事件,延迟事件或从备份或持久性日志中重放数据时,也能提供正确的结果。在活动期间,时间的进度取决于数据,而不是挂在任何挂钟上。事件时间程序必须指定如何生成事件时间水印,这是在事件时间内发出信号的机制。该机制如下所述。

事件时间处理通常会产生一定的延迟,这是由于其对晚期事件和乱序事件等待一定时间的性质。因此,事件时间程序通常与处理时间操作相结合。

  • 进入处理时间:摄取时间是事件进入Flink的时间。在源运算符处,每个记录都将源的当前时间作为时间戳记,而基于时间的操作(如时间窗口)则引用该时间戳记。
摄取时间在事件时间和处理时间之间的概念上处于概念上。与处理时间相比,它稍微昂贵一些,但可以提供更可预测的结果。由于摄取时间使用稳定的时间戳(在源处分配一次),对记录的不同窗口操作将引用相同的时间戳,而在处理时间内,每个窗口操作员可以将记录分配到不同的窗口(基于本地系统时钟和任何运输延误)。
与事件时间相比,摄入时间程序无法处理任何乱序事件或迟后数据,但程序不必指定如何生成水印。
在内部,摄取时间与事件时间非常相似,但具有自动时间戳分配和自动生成水印的功能。
设置时间特征

猜你喜欢

转载自blog.csdn.net/xiamizy/article/details/80049480
今日推荐