Apache flink 当时间戳被分配到源代码时,flink如何处理延迟?

Apache flink 当时间戳被分配到源代码时,flink如何处理延迟?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,到目前为止,我了解到有3种方法可以处理Flink中的后期数据: 删除延迟事件(这是事件时间窗口操作符的默认行为。因此,延迟到达元素不会创建新窗口。) 重定向延迟事件(也可以使用side输出功能将延迟事件重定向到另一个数据流) 通过包含延迟事件更新结果(重新计算不完整的结果并发出更新) 我不太清楚非窗口操作符的延迟事件会发生什么,特别是当时间戳被分配到源时。 这里我有一个FlinkKafkaConsumer: new FlinkKafkaConsumer( liveT

到目前为止,我了解到有3种方法可以处理Flink中的后期数据:

  • 删除延迟事件(这是事件时间窗口操作符的默认行为。因此,延迟到达元素不会创建新窗口。)

  • 重定向延迟事件(也可以使用side输出功能将延迟事件重定向到另一个数据流)

  • 通过包含延迟事件更新结果(重新计算不完整的结果并发出更新)

我不太清楚非窗口操作符的延迟事件会发生什么,特别是当时间戳被分配到源时。 这里我有一个FlinkKafkaConsumer:

new FlinkKafkaConsumer(
          liveTopic,
          deserializer,
          config.toProps
        ).setStartFromTimestamp(startOffsetTimestamp)
          .assignTimestampsAndWatermarks(
            WatermarkStrategy
              .forBoundedOutOfOrderness[String](Duration.ofSeconds(20))
          )
如果我的Kafka分区中的某些数据出现了问题,比如说,记录的时间戳延迟了1分钟,那么当Flink使用这些数据时,这些数据会被丢弃吗?
我是否可以配置某种类型的允许延迟(如使用窗口操作符)?

唯一删除延迟事件的操作符是那些必须根据时间决定如何处理每个事件的操作符。所以,默认情况下,基于事件时间的窗口和CEP会删除延迟事件(CEP这样做是因为它必须首先对事件流进行基于时间的排序,而延迟事件已经错过了排序的机会)。在这两种情况下,这些API都提供了一个延迟事件流作为一个侧输出通道

Flink SQL的时态操作符也会删除延迟事件。到目前为止,Table/SQL没有提供任何方法来捕获或容纳这些延迟事件(不使用datastreamapi)

但其他所有运营商都只是对事件进行操作,而不关注它们的迟到。在
ProcessFunction
中,您可以检查时间戳并将其与当前水印进行比较,并自行决定如何处理延迟事件