【发布时间】:2020-02-21 21:59:47
【问题描述】:
关于事件时间处理,Flink 中的水印是什么?为什么需要它。? 为什么在所有使用事件时间的情况下都需要它。在所有情况下,我的意思是如果我不进行窗口操作 那为什么我们还需要水印。 我来自火花背景。在 spark 中,只有当我们在传入事件上使用窗口时才需要水印。
看了几篇文章,觉得水印和windows好像是一样的,如有不同请说明并指出
发表你的回复我做了更多的阅读。下面是一个更具体的查询。
主要问题:- 当我们接受迟到时,为什么我们需要乱序。
给出下面的例子:
假设您有一个 BoundedOutOfOrdernessTimestampExtractor,其界限为 2 分钟,滚动窗口为 10 分钟,从 12:00 开始到 12:10 结束:
12:01,A
12:04, 乙
WM,12:02 // 12:04 - 2 分钟
12:02, C
12:08,D
12:14,E
WM,12:12
12:16,F
WM,12:14 // 12:16 - 2 分钟
12:09,G
在上面的示例中,[12:02, C] 记录没有被删除,而是包含在 12:00 -12:10 的窗口中并随后被评估。- 因此水印也可以是事件时间戳
只有在配置了 5 分钟的可接受延迟时,记录 [12:09, G] 才会包含在窗口 12:00 - 12:10 中。这会处理迟到和乱序的事件
所以现在添加到我上面的上一个问题,什么是 outoforder 选项的必要性是某个值(不是 0)的 BoundedOutOfOrdernessTimestampExtractor 而不是事件时间戳 istelf?
什么是乱序可以实现允许延迟不能实现的以及在什么场景下它可以实现?
【问题讨论】:
-
这已经被问过了。不涉及windows的例子见stackoverflow.com/a/51516225/2000823。
标签: apache-flink flink-streaming