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

Flink:带有后期元素的水印

孙博艺
2023-03-14

我在Flink中做实时流,其中Kafka是消息队列。我正在应用120秒的EventTimeSlidingWindow。和1秒的幻灯片。我还在事件时间的每秒插入水印。

我担心的是,如果元素在水印之后延迟出现,会发生什么?现在,我的情况是,Flink简单地丢弃了相应水印之后的消息。filnk是否提供了任何机制来处理此类延迟消息,例如维护单独的窗口?我也看过了文档,但我没有弄清楚。

共有3个答案

澹台镜
2023-03-14

允许的延迟会导致多个输出。因此,最后一个偶数的窗口结束和水印结束是一次,然后对于每个迟到的元素另一个聚合输出。

仉联
2023-03-14

默认情况下,当水印超过窗口末端时,会删除后期元素。但是,Flink允许为窗口操作符指定允许的最大延迟。Allowed lateness指定元素在删除之前可以延迟的时间,默认值为0。水印通过窗口末尾之后但在通过窗口末尾之前到达的元素加上允许的延迟,仍将添加到窗口中。根据使用的触发器,延迟但未掉落的元素可能会导致窗口再次触发。EventTimeTrigger就是这种情况。

为了做到这一点,Flink会保留窗口的状态,直到它们允许的延迟到期。一旦发生这种情况,Flink会删除窗口并删除其状态。

另一个选项是SideOoutput,即除了数据流操作产生的主流之外,您还可以生成任意数量的附加side输出结果流。结果流中的数据类型不必与主流中的数据类型匹配,不同侧输出的类型也可以不同。当您想要分割数据流时,此操作非常有用,通常需要复制数据流,然后从每个数据流中过滤出您不想要的数据。

使用侧输出时,首先需要定义一个OutputTag,用于标识侧输出流:

https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/stream/side_output.html

储峻
2023-03-14

Apache Flink有一个称为允许延迟的概念,用于windows处理水印之后到达的数据。

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

  • 我想测量有多少事件在允许的延迟内到达,按事件的特定特征分组。我们假设特定类型的事件有更多的延迟到达,并想验证这一点。 我想到的进行度量的地方是OneElement方法中的自定义触发器,因为这是我们知道事件是否延迟的地方。然而,在SlidingEventTimeWindow的情况下,这意味着如果单个元素延迟超过一张幻灯片,那么它可以被计算多次。 有什么建议吗?

  • 我有以下,每个都有几个元素: 我打算让变量包含、或类型的元素。我尝试将类型的元素添加到中,如下所示: 但是IDE不允许我这样做,它说: 我是否使用了?我如何解决这个问题?

  • 我想根据元素的数据集过滤元素。我创建了一个小提琴来显示我所处的位置:这里,但如你所见,当我选择“红色”时,它只是隐藏了“红色”项,而不是其他项。就像“黄色”一样,它不会做任何事情。 下面是脚本: 多谢!

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

  • 我想使用Flink的事件时间戳,并计划实现一个简单的emitWatermark,即系统。currentTimeInMillis-10秒。我的理解是,翻滚窗口将触发start\u time window\u间隔10秒。因此,如果事件晚于水印到达,则会删除这些事件。 有没有办法将Flink丢弃的所有事件写入S3这样的接收器?