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

清除数据流中的Flink水印状态

束涵涤
2023-03-14

是否可以清除数据流中的当前水印?

一个月长的水印不允许延迟的示例输入:

[
  { timestamp: '10/2018' },
  { timestamp: '11/2018' },
  { timestamp: '11/2018', clearState: true },
  { timestamp: '9/2018' }
]

通常,“2018年9月”的记录会因为时间太晚而被扔掉。当看到clearState消息时,是否有方法以编程方式重置水印状态?

共有1个答案

严扬
2023-03-14

水印不应该倒退——它不确定会发生什么,实际上这是个坏主意。然而,有各种方法来容纳迟交的数据。

如果您正在使用窗口API,Flink将在窗口的允许延迟过期后清除任何窗口状态。如果您想要更多的控制,请考虑使用<代码>处理函数< /> >,这将允许/要求您显式地管理状态(和定时器)。

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

  • 我在工作中使用ProcessWindowFunction并保持StateValue。我的目标是将值保持在超过1个窗口的状态,这意味着状态不会在每个窗口的末尾被清除。我有两个问题: 我怎样才能清除状态?有没有设置触发器并用它来清除状态的选项?(当在ProcessFunction中使用状态时,我能够设置触发器以执行此清除,即使没有新事件) 有没有一种方法来构建一个单元测试来检查我的ProcessWin

  • 我使用Flink与运动源和事件时间键控窗口。应用程序将监听实时数据流,窗口化(事件时间窗口)并处理每个键控流。我有另一个用例,我也需要能够支持某些关键流的旧数据回填(这些将是具有事件时间的新关键流 鉴于我正在使用水印,这是一个问题,因为Flink不支持每键水印。因此,回填的任何键控流将最终被忽略,因为此流的事件时间将是 我经历了其他类似的问题,但没能得到一个可能的方法。以下是我正在考虑的可能方法,

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

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

  • 有1个高通量Kafka流定义如下 上述窗口操作符的水印正确转发。 上述窗口操作符中的需要使用一些保存在某些S3文件中的信息来丰富。S3文件很少更新。 S3文件作为流读取,然后广播以丰富中的元素。 然后连接这两个流,用类型的元素来丰富类型的所有元素。 有2个输入。其中之一是不断转发水印,但广播流没有任何时间信息或水印。这导致EnrichedAProcess的水印根本无法转发,因为它的一个输入没有传入