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

Flink中的水印和触发器有什么区别?

阚英武
2023-03-14

我读到,“...排序运算符必须缓冲它收到的所有元素。然后,当它收到水印时,它可以对时间戳低于水印的所有元素进行排序,并按排序顺序发出它们。这是正确的,因为水印表明不会有更多的元素到达,这些元素会与排序的元素混合在一起......”-流中的https://cwiki.apache.org/confluence/display/FLINK/Time和顺序

因此,水印似乎可以作为信号发送给以下操作符,以便开始处理。我想,这也是触发器的作用。这两者有什么区别?

共有2个答案

伯晨
2023-03-14

水印可以被认为是一种断言,即事件时间流现在在特定时间戳之前是完整的。当操作员处理水印时,它将导致触发任何相关事件时间计时器。使用EventTimer的操作符是EventTimeWindows和ProcessFunctions。

触发器是窗口API的一部分,用于定义Windows何时生成结果。EventTimeTrigger围绕一个事件时间计时器,该计时器在处理适当大的水印时调用,表示窗口现在已完成。

施季
2023-03-14

您可以将水印视为告诉操作员它是什么(事件)时间的特殊记录。当操作员收到水印时,它会将水印与其当前时间和从不同流分区收到的其他水印进行比较。根据比较,操作员会提前自己的时钟。

一些操作员注册计时器(windows、基于时间的联接、自定义实现)。当操作员的时钟超过计时器注册的时间时,操作员触发计时器。

所以,水印和计时器是两回事。水印告诉操作员现在是什么时间,操作员在正确的时间点触发计时器。

 类似资料:
  • 如果有人用下面给出的Apache flink给出usecase示例来解释每个水印API之间的差异,这将是有帮助的 周期水印- 标点符号水印-

  • 在Flink中,我发现了2种设置水印的方法, 第一个是 第二个是 我想知道哪个最终会生效。

  • 我试图了解Apache FLink中Windows和Watermark生成之间的依赖关系,我在下面的示例中出现错误: 这里的时间戳是一个长的,我们可以从Kafka源中检索到,应该是:a,4 C,8,其中C是类别,5是时间戳。 每当我发送事件时,数据流都会打印,但不会使用窗口打印这些事件(打印(“Windows”)。此外,如果我收到一个事件A,12,然后生成了一个水印(在10秒内),那么我有C,2,

  • 我看到关于为每个密钥添加水印支持的讨论很多。但是flink支持每个分区的水印吗? 当前-然后考虑所有水印(非空闲分区)的最小值。因此,窗口中最后挂起的记录也被卡住了。(使用periodicemit增加水印时) 任何关于这方面的信息都非常感谢!

  • 问题陈述:来自kafka源的流式事件。这些事件有效载荷为字符串格式。将它们解析为文档,并根据事件时间每隔5秒将其批量插入DB。 函数正在执行。但程序控制不会进入。因此不会发生批量插入。我尝试了键控和非键控窗口。它们都不工作。没有抛出错误。 flink版本:1.15.0 下面是我的主要方法的代码。我应该如何解决这个问题?

  • 我们正在构建一个流处理管道,以使用Flink v1.11和事件时间特性来处理Kinesis消息。在定义源水印策略时,在官方留档中,我遇到了两个开箱即用的水印策略;forBoundedOutOfOrthy和forMonotonousTimestamps。但根据我对上述内容的理解,我认为这些不适合我的用法。以下是我的用法细节: 来自输入流的数据:(包含每分钟带有时间戳的数据) 现在,我想处理11:00