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