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

Flink水印策略

拓拔玺
2023-03-14

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

来自输入流的数据:(包含每分钟带有时间戳的数据)

{11:00, Data1}
{11:01, Data2}
{11:00, Data3}
{11:00, Data4}
{11:01, Data5}
...

现在,我想处理11:00-11:01的窗口(翻滚事件时间:1min),其中包含[Data1,Data3,Data4],正好是在11:00时间戳到达的第一个事件之后20秒。类似地,11:01-11:02之间包含[Data2,Data5]的下一个窗口需要在具有11:01时间戳的第一个事件出现后20秒执行。这种水印策略在Flink中是否可行?

共有1个答案

潘胤
2023-03-14

以下是实现此目标的方法:

在OneEvent方法中,跟踪迄今为止看到的最大时间戳。无论何时更新此变量,请记录当前系统时间。

然后,当调用onPeriodicEmit时(默认情况下,每200毫秒调用一次),如果当前最大时间戳更新后已经20秒,则发出等于当前最大时间戳加1秒的水印。

 类似资料:
  • 我们正在构建一个流处理管道来处理/摄取Kafka消息。我们正在使用Flink v1.12.2。在定义源水印策略时,在官方留档中,我遇到了两种开箱即用的水印策略;forBoundedOutOfOrness和forMonotonousTimestamps。我确实浏览了javadoc,但并不完全理解何时以及为什么你应该使用一种策略而不是另一种策略。时间戳基于事件时间。谢谢。

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

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

  • 我是Flink的新手,所以在定义Flink中的水印时,我面临一些问题。 让我们从Kafka消费者开始。使用的反序列化是JSONKeyValueDeserializationSchema,因此没有自定义解析。 如果将接收器应用于此代码,则其工作正常。问题是需要水印来避免无序事件。这就是我写的策略: 在做了一些研究后,我最终得到了这段代码,但这不起作用。这些是我的问题: 在这里使用ObjectNode

  • 我不确定我的Flink应用程序是否需要水印。什么时候有必要? 如果我不需要它们,水印策略的目的是什么。noWatermarks()?

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