數據進入到窗口的時候,窗口是否觸發后續的計算由窗口觸發器決定,每種類型的窗口都有對應的窗口觸發機制。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 在超時時清理窗口所有數據。