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

Flink时间特性与AutoWatermarkInterval

何建中
2023-03-14

如果水印在指定的时间间隔内没有被更改(没有事件到达),运行时将不会发出任何水印?另一方面,如果在下一个间隔之前到达了新事件,则将立即发出新的水印,或者将其排队/等待,直到到达下一个setAutoWatermarkInterval间隔。

我很好奇AutoWatermarkInterval的最佳配置是什么(特别是对于高速率源):这个值越小,处理时间和事件时间之间的延迟就越小,但发送水印的带宽开销越大。真的准确吗?

另一方面,如果我使用了env.setStreamTimeCharacteristic(TimeCharacteristic.ingestionTime),Flink运行时将自动分配时间戳和水印(时间戳对应于事件进入Flink数据流管道的时间,即源运算符),尽管如此,即使使用ingestionTime,我们仍然可以定义处理时间计时器(在processElement函数中),如下所示:

long timer = context.timestamp() + Timeout.
context.timerService().registerProcessingTimeTimer(timer);

其中context.timestamp()是Flink设置的摄取时间。

谢谢你。

共有1个答案

谷玉韵
2023-03-14

autoWatermarkInterval只影响关注它的水印生成器。他们也有机会结合事件处理生成水印。

对于那些使用autoWatermarkInterval(这肯定是正常情况)的水印生成器,他们正在收集下一个水印应该是什么的证据,作为为每个事件分配时间戳的副作用。当计时器触发(基于autoWatermarkInterval)时,水印生成器会被Flink运行时请求生成下一个水印。水印不是在某个地方等待的,也不是排队的,而是根据需要创建的,基于时间戳分配器存储的信息--这通常是流中到目前为止看到的最大时间戳。

是的,更频繁的水印意味着更多的通信和处理开销,以及更低的延迟。您必须根据应用程序的需求来决定如何处理这种吞吐量/延迟的折衷。

 类似资料:
  • 我如何在Apache flink中使用摄取时间特征。我知道我们需要设置环境时间特征。但是我如何收集带有时间戳的数据,可以称为摄取时间。目前我使用它时,它是根据系统时钟时间处理窗口。我想根据数据进入flink环境的时间进行处理。 有助于清晰理解的少量代码摘录: 环境的时间特征: 窗口时间: 源中的集合: 如果数据采集在11:03开始,我想在11:08结束,即5分钟。但它会在11点05分停止(某种程度

  • 问题内容: 通常,一些答案提到给定的解决方案是 线性的 ,或者另一个是 二次的 。 如何发挥作用/识别什么? 有人能为像我这样仍然不认识的人解释这种最简单的方法吗? 问题答案: 当所需时间随所涉及元素的数量线性增加时,该方法是线性的。例如,用于打印数组元素的for循环大致是线性的: 因为如果我们打印range(100)而不是range(10),则运行它所需的时间要长10倍。您会经常看到写为O(N)

  • 我已经创建了一个实时时钟,它与计算机时间同步,并显示在标签中。 记入NeverHopeless给出的起始代码。多谢了。

  • 我想用python和tweepy流我自己的twitter时间线,并使用下面的代码,但它只是打印我一些数字,我没有打印我的时间线twitts。你能帮我吗?

  • 我正在尝试flink的一些网络监控工作。我的目标是计算每个的不同。 我下面的代码工作,但性能真的很糟糕。似乎每个滑动窗口都重新计算所有事件,但这不应该是必要的。 例如,我们有时间秒1-600的事件。Flink可以得到每秒的累加器,所以我们每秒有600个累加器。当第一个滑动窗口过期时,flink只合并1-300的累加器,并销毁第二个1的累加器。此窗口还可以在最后一秒前预合并1-299。当第二个滑动窗

  • 请检查上面的代码,并告诉我是否做得正确。在事件时间和水印分配之后,我想在process函数中处理流,其中我将为不同的密钥收集10分钟的流数据。