FLINK-SQL窗口会定期刷新元素进行处理吗


0

我很困惑翻滚窗口是否会以固定的间隔进行计算并发出处理元素。示例我有一个 query,它的 job 间隔为10秒。

select id, key from  eventTable  GROUP BY TUMBLE(rowTime, INTERVAL '10' SECOND), id, key ;

现在假设:应用程序接收事件

    10:00:00时的E1

如你所见,E1和E2在5秒内到达,E3在12:00:15到达。

    你能帮我一下E1和E2什么时候发射出来处理吗?是10:00:11吗?或者当E3来了,然后query将计算窗口并发出?

感谢你在这方面的帮助。

1 答案


0

如果使用事件时间处理,则当 watermark通过10:00:10时,将发出10:00:10结束的窗口。如果 watermark是以通常的有界无序方式完成的,并且没有其他事件,则 watermark在E3处理之前不会前进。

如果您需要考虑空闲性的 watermark策略,我相信您唯一的选择是使用datastreamapi创建流并应用处理空闲源的 watermark,然后将数据流 transformation为表。

请注意,WithIdless(…)所做的是将一个流标记为idle,这可以防止流阻止 watermark。这解决了一个空闲流在存在其他活动流时阻碍整个 job的问题。如果你想让 watermark在完全没有发生的情况下继续,你需要做一些更激烈的事情。

理想的解决方案是拥有来自同一个源的keepalive消息,这样您就知道空闲是真实的,而不是中断。否则,请参阅ProcessingTimeRailingBoundedOutforerNessTimestampExtractor,以了解如何使用计时器检测空闲状态并 root据时间的推移(而不是新事件的到来)提前 watermark。(请注意,此示例尚未更新以使用新的WatermarkStrategy接口。)


我来回答

写文章

提问题

面试题