感谢大牛的回复,我又看了一下源码,在advanceWatermark函数中,如果timer对应的窗口的maxTimestamp <
当前的watermark,窗口才会被触发,所以窗口被触发的两个条件:
1 watermark >= window.maxTimestamp
2 窗口有元素
这个是在任何情况下都适用的
在 2019-04-16 09:19:40,"Jark Wu" <[email protected]> 写道:
>是的。
>
>> 在 2019年4月15日,18:55,[email protected] 写道:
>>
>> 窗口触发的条件是:
>> 1、watermark时间 >= window_end_time
>> 2、在[window_start_time,window_end_time)中有数据存在
>>
>>
>> 但是在代码中我们可以看到如果
>> if (window.maxTimestamp() <= ctx.getCurrentWatermark()) {
>> // if the watermark is already past the window fire immediately
>> return TriggerResult.FIRE;
>> } else {
>> ctx.registerEventTimeTimer(window.maxTimestamp());
>> return TriggerResult.CONTINUE;
>> }
>> 是不是可以这么理解。如果watermark一直比window 的end_Time-1 小,那么到了窗口的endTime-1 ,窗口就会自动被触发
>> 非常感谢大牛们的解答
>>