小编sam*_*ser的帖子

Flink Windows 边界、水印、事件时间戳和处理时间

问题定义和建立概念

比方说,我们有一个TumblingEventTimeWindow大小5分钟。我们有包含2 条基本信息的事件:

  • 数字
  • 事件时间戳

在这个例子中,我们在工作人员机器的挂钟时间下午 12:00启动我们的Flink拓扑(当然工作人员可能有不同步的时钟,但这超出了本问题的范围)。该拓扑包含一个处理运算符,其职责是汇总属于每个窗口的事件值和一个与此问题无关的 KAFKA Sink。

  • 这个窗口有一个BoundedOutOfOrdernessTimestampExtractor,允许延迟一分钟
  • 水印:据我所知,Flink 和 Spark Structured Stream 中的水印定义为(max-event-timestamp-seen-so-far - allowed-lateness)。任何事件时间戳小于或等于此水印的事件都将在结果计算中被丢弃和忽略。

第 1 部分(确定窗口的边界)

快乐(实时)路径

在这种情况下,几个事件到达Flink Operator,具有不同的事件时间戳12:01 - 12:09。此外,事件时间戳与我们的处理时间相对一致(如下面的 X 轴所示)。由于我们正在处理EVENT_TIME特性,因此应通过其事件时间戳来确定偶数是否属于特定事件。

在此处输入图片说明

旧数据涌入

在那个流程中,我假设两个翻滚窗口边界是并且仅仅因为我们在12:00开始执行拓扑。如果这个假设是正确的(我希望不是),那么在回填情况下会发生什么,其中几个事件带有更旧的事件时间戳,并且我们在12:00再次启动了拓扑?(足够老,我们的迟到津贴不包括他们)。类似于以下内容:12:00 -- …

watermark stream-processing apache-flink flink-streaming

6
推荐指数
1
解决办法
1060
查看次数