Flink定制Windows充电

时间:2016-04-19 13:40:00

标签: apache-flink flink-streaming

我正在使用Flink的TimeWindow功能来执行一些计算。我正在创建一个5分钟Window。但是我想第一次创建一小时Window。我需要的下一个Windows是5分钟。

这样,第一个小时就会收集数据并对其进行操作。完成此操作后,每隔五分钟执行相同的操作。

我发现这可以通过trigger来实现,但我不确定我应该使用哪个trigger以及如何使用。

更新:我认为即使triggers有帮助,我也可以根据window来定义触发时间/次数,而不是第一次window时被触发。

1 个答案:

答案 0 :(得分:3)

实施这一点并非易事。

鉴于KeyedStream,您必须使用GlobalWindow和自定义有状态Trigger来“记住”是否第一次被解雇。

val stream: DataStream[(String, Int)] = ???
val result = stream
  .keyBy(0)
  .window(GlobalWindows.create())
  .trigger(new YourTrigger())
  .apply(new YourWindowFunction())

有关GlobalWindowTrigger的详细信息位于Flink Window documentation