当前位置: 首页 > 知识库问答 >
问题:

Apache Flink:水印、删除延迟事件和允许延迟

郭德惠
2023-03-14

我很难理解水印和允许迟到的概念。

以下是[邮件存档]的摘录|https://www.mail-archive.com/user@Flink。阿帕奇。组织/msg08758。html]这谈到了水印,但我还有几个问题。以下是引用的示例:

假设您有一个BoundedOutOfOrdernessTimestampExtractor,具有2分钟的绑定和10分钟的翻转窗口,从12:00开始到12:10结束:

如果您具有以下流序列:

12:01, A
12:04, B
WM, 12:02 // 12:04 - 2 minutes
12:02, C
12:08, D
12:14, E
WM, 12:12
12:16, F
WM, 12:14 // 12:16 - 2 minutes
12:09, G

不允许迟到

当窗口操作符接收到<代码>

允许迟到3分钟

当<代码>

允许迟到5分钟

当<代码>

据我了解:

  1. 水印应该告诉我们,任何到达的事件时间戳小于水印时间戳的元素都将被丢弃。所以12:02的水印意味着Flink在活动时间12:02之前已经看到了它必须看到的一切。任何事件timesatamp小于此水印的元素(例如12:01)都将被删除
  2. 允许延迟的概念仅适用于标记窗口结束的最后一个水印之后

我基于理解提出的问题:

  1. 考虑到Flink之前的水印(WM,12:02)已经说过“我在12:02之前看到了一切”,消息“12:02,C”是如何被接受的

如果您具有以下流序列:

12:01, A
12:04, B
WM, 12:02 // 12:04 - 2 minutes
12:02, C
 12:01, CCC // Inserted by Sheel
12:08, D
12:14, E
WM, 12:12
12:16, F
WM, 12:14 // 12:16 - 2 minutes
12:09, G

这仍然在12:00-12:10窗口中,但在水印WM 12:02后面。假设允许的迟到时间是5分钟。该记录是否会“以某种方式”被接受,从而将允许的延迟引入图片中,或者考虑到水印12:02已经越过,该记录是否会被删除?

共有1个答案

莫兴言
2023-03-14

水印控制窗口的生存期,但不直接控制是否删除记录。当Flink的WindowOperator收到一条新记录时,它将计算它所属的窗口集。如果此集合至少包含一个活动窗口,这意味着没有比窗口允许延迟的结束时间更大的水印,则记录将分配给此窗口,并将成为窗口计算的一部分(即使记录的时间戳低于上次看到的水印)。因此,可以说windows降低了水印相对于单个记录的分辨率。

在您的情况下,这意味着C和CCC都将成为窗口的一部分,因为系统在

 类似资料:
  • 问题内容: 我正在编写一个小的脚本,该脚本在页面加载时将CSS子类分配给三个元素。800ms之后,我希望它删除该子类。 我认为这段代码可以做到: 遗憾的是,任何帮助将不胜感激。提前致谢。 问题答案: 您可以使用 功能: 在指定的延迟后调用函数或执行代码段。

  • 我试图开发以下代码,但它不起作用。我想使用apache Flink来延迟时间(在时间戳字段中指定的)与当前日期不同的事件。 样品: > 当前日期:2022-05-06 10:30 事件1[{“user1”:“1”,“user2”:“2”,“timestamp”:“2022-05-06 10:30”}-- 事件2[{“user1”:“1”,“user2”:“2”,“timestamp”:“2022-

  • 我有以下用例,如果有明显的解决方案,很抱歉,但我对Flink非常陌生: 谢谢

  • 如何在允许的延迟期结束之前“清除”窗口元数据(WindowOperator和InternalTimer)? 是否可以将此元数据与窗口数据本身一起清除? 我们不介意丢失元数据——不需要根据之前非延迟数据的上下文来处理具有相同关键时间的延迟事件。 一些背景知识- [目前正在使用Flink-v1.6]我们正在处理事件时间窗口,并处理大量具有唯一键的事件。95%的活动不会迟到,只会开火一次。 我们的工作规

  • 问题内容: 我正在尝试使用新的React Lazy和Suspense创建后备加载组件。这很好用,但后备时间仅显示几毫秒。有没有办法增加额外的延迟或最短时间,因此我可以在渲染下一个组件之前显示该组件的动画? 现在懒导入 等待组件: 我可以做这样的事情吗? 问题答案: 函数应该返回对象的承诺,该对象由具有默认导出功能的模块返回。不会返回承诺,也不能那样使用。尽管任意承诺可以: 如果目标是提供 最小的

  • 我正在尝试加入Flink中的两种类型(比如A和B)。我想确认我的理解是否正确。事件的某些属性- 事件A立即流入flink,延迟几分钟(5-10分钟) 事件B以15-30分钟的轻微延迟流动 事件a和事件B之间存在1:1连接 我已将事件A的数据流配置为10分钟的BoundedAutofordernessTimestampExtractor,将事件B的数据流配置为30分钟。稍后,我使用表API进行时间窗