1

我知道如果迟到并且其所属窗口已关闭,则默认情况下会丢弃迟到的事件。
我会问如何基于事件时间的间隔加入?水印的确切行为/效果是什么?后期事件会下降吗?

4

1 回答 1

3

一般情况下:watermark 向 Flink 表明,所有带有 watermark 时间戳的记录都已到达。所有时间戳低于水印(双方的最小水印)的元素都被认为是“迟到的”。

对于 FlinkSQL 和 DataStream API (KeyedStream#intervalJoin) 中的间隔连接,有两个单独的实现 [1,2],但答案是相同的:延迟事件将被丢弃。

有趣的是,Flink SQL 运算符有一个允许的延迟字段,但它总是用0L[2] 初始化。看来,可能有计划扩展此功能。

[1] https://github.com/apache/flink/blob/master/flink-streaming-java/src/main/java/org/apache/flink/streaming/api/operators/co/IntervalJoinOperator.java#L230

[2] https://github.com/apache/flink/blob/master/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/plan/nodes /physical/stream/StreamExecIntervalJoin.scala#L313

于 2020-12-30T09:57:09.423 回答