数据进入到窗口的时候,窗口是否触发后续的计算由窗口触发器决定,每种类型的窗口都有对应的窗口触发机制。WindowAssigner 默认的 Trigger通常可解决大多数的情况。我们通常使用方式如下,调用trigger()方法把我们想执行触发器传递进去:
SingleOutputStreamOperator<Product> name = name.keyBy("name").window(TumblingEventTimeWindows.of(Time.seconds(5))).trigger(ContinuousEventTimeTrigger.of(Time.seconds(1)))
.process(...);
如果不设置trigger()方法则 WindowAssigner 会根据不通类型默认使用一个 Trigger,例如所有的 event-time WindowAssigner 都默认使用 EventTimeTrigger。 这个 trigger 会在 watermark 越过窗口结束时间后直接触发,一共有以下几种trigger
ProcessingTimeoutTrigger: 可以将任意 Trigger 作为参数转为为 ProcessingTimeout 类型的 Trigger。在第一个元素到达后设置一个超时处理时间。还可以通过指定 resetTimerOnNewRecord 为每个到达的元素重新更新计时器,也可以指定是否应通过 shouldClearOnTimeout 在超时时清理窗口所有数据。