首页 > 解决方案 > 当我将水印设置为高数字时,为什么我的 flink 窗口会触发?

问题描述

我希望只有在我们等到水印的最大延迟定义的最大可能时间后才会触发窗口。

.assignTimestampsAndWatermarks( WatermarkStrategy.forBoundedOutOfOrderness(Duration.ofMillis(10000000)) .withTimestampAssigner((order, timestamp) -> order.getQuoteDatetime().getTime())) .keyBy(order-> GroupingsKey.builder().symbol(order .getSymbol()).expiration(order.getExpiration()) .build()) .window(EventTimeSessionWindows.withGap(Time.milliseconds(100000000)))

在这个例子中,为什么窗口会在任何有意义的时间内触发?窗口是一个非常大的窗口,我们等待记录的时间很长。当我运行我的示例时,窗口仍然会在一分钟内被触发。这是为什么?

标签: apache-flinkwatermarkstream-processing

解决方案


原来水印是在源耗尽后生成的(在这种情况下,它是从读取文件中生成的)。因此发出了最大水印(9223372036854775807)。触发发生在:window.maxTimestamp() <= ctx.getCurrentWatermark()

https://stackoverflow.com/a/51554273/1099123


推荐阅读