我正在使用Flink的TimeWindow
功能来执行一些计算。我正在创建一个5分钟的Window
。然而,我只想第一次创建一个一小时的Window
。我需要的下一个窗口是5分钟。
这样,在第一个小时里,数据被收集起来,我对它进行操作。一旦完成,每五分钟进行一次相同的操作。
我发现这可以用trigger
实现,但我不确定我应该使用哪个trigger
以及如何使用。
更新:我认为即使是triggers
也没有帮助,据我所知,它们只是定义了每个window
的触发时间/计数,而不是第一个window
何时触发。
实现这一点并非易事。
给定KeyedStream
,您必须使用GlobalWindow
和自定义有状态的Trigger
,后者"记住"是否是第一次激发的。
val stream: DataStream[(String, Int)] = ???
val result = stream
.keyBy(0)
.window(GlobalWindows.create())
.trigger(new YourTrigger())
.apply(new YourWindowFunction())
有关GlobalWindow
和Trigger
的详细信息,请参阅Flink Window文档。