You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by "jszhouchong@163.com" <js...@163.com> on 2019/04/15 10:55:52 UTC

窗口触发机制的疑惑

窗口触发的条件是:
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 ,窗口就会自动被触发
非常感谢大牛们的解答


Re:Re: 窗口触发机制的疑惑

Posted by "jszhouchong@163.com" <js...@163.com>.


感谢大牛的回复,我又看了一下源码,在advanceWatermark函数中,如果timer对应的窗口的maxTimestamp < 当前的watermark,窗口才会被触发,所以窗口被触发的两个条件:
1 watermark >= window.maxTimestamp
2 窗口有元素
这个是在任何情况下都适用的






在 2019-04-16 09:19:40,"Jark Wu" <im...@gmail.com> 写道:
>是的。
>
>> 在 2019年4月15日,18:55,jszhouchong@163.com 写道:
>> 
>> 窗口触发的条件是:
>> 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 ,窗口就会自动被触发
>> 非常感谢大牛们的解答
>> 

Re: 窗口触发机制的疑惑

Posted by Jark Wu <im...@gmail.com>.
是的。

> 在 2019年4月15日,18:55,jszhouchong@163.com 写道:
> 
> 窗口触发的条件是:
> 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 ,窗口就会自动被触发
> 非常感谢大牛们的解答
>