apache-flink - 当我将水印设置为高数字时,为什么我的 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)))
在这个例子中,为什么窗口会在任何有意义的时间内触发?窗口是一个非常大的窗口,我们等待记录的时间很长。当我运行我的示例时,窗口仍然会在一分钟内被触发。这是为什么?
解决方案
原来水印是在源耗尽后生成的(在这种情况下,它是从读取文件中生成的)。因此发出了最大水印(9223372036854775807)。触发发生在:window.maxTimestamp() <= ctx.getCurrentWatermark()
推荐阅读
- c# - 在 Xamarin Forms 中网络断开后 Azure 服务总线 QueueClient 未重新连接
- angular - 如何设置全局变量以包含从方法返回的数据 - Angular 6服务?
- android-studio - android 3.4 - 如何生成签名的apk和构建apk?
- javascript - 无法捕获由 js 附加的类的点击事件
- python - 如何在 AppleScript 上发送 iMessage?
- regex - 匹配除脚本标签之外的所有标签的 Ruby 正则表达式
- php - Auth::user() 在 Laravel 5.8 中返回 null
- jmx - 在 Grafana 中与 groupBy 一起计算百分比
- single-sign-on - 元数据中的 AssertionConsumerService 和 SSO 中的 saml2 发行者是否相同?
- c++ - 如何将垂直滚动条添加到全屏 win32 控制台?