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 "guoliubin85@foxmail.com" <gu...@foxmail.com> on 2020/12/17 06:15:37 UTC
如何通过现实时间控制事件时间的窗口
Hi,
我们现在以eventTime作为时间标准,每3秒做一次TumbleWindow,数据假设如下
系统时间
与上一条间隔
事件时间
与上一条间隔
9:00:01
9:00:01
9:00:11
10s
9:00:02
1s
9:00:12
1s
9:00:12
10s
从事件时间上看,第一条和第二条数据是归集到同一窗口的。
不过现在的处理需要在窗口有第一条数据后系统时间超时4s以上就强制关闭该窗口,即在系统时间9:00:05时关闭窗口,忽略掉第二条数据。
请问这种情况需要怎么生成watermark?
使用过
WatermarkStrategy.forBoundedOutOfOrderness(Duration.ofSeconds(4L))
或者
WatermarkStrategy.forMonotonousTimestamps().withIdleness(Duration.ofSeconds(4L))
结果都把第一条和第二条数据归集到同一个窗口中了,
都没有达到预想的结果。
要如何设置才能在窗口中仅有一条数据而忽略第二条数据?
guoliubin85@foxmail.com
Re: Re: 如何通过现实时间控制事件时间的窗口
Posted by 赵一旦 <hi...@gmail.com>.
大概懂了,但还不够清晰。
因为tumble window中,如果是5s窗口,则是按照0-5,5-10,10-15这样的。不是基于第一条数据的。
如果你要按照第一条数据到达开始开窗,那就不要使用flink的window机制。
直接基于process function提供的底层功能,自己通过timeservice实现。
再或者如果需要使用window,则使用global
window,自己定义window的trigger触发机制即可(比如进来第一条数据,就设置定时器,定时器到了则触发窗口计算然后清理窗口状态)。
guoliubin85@foxmail.com <gu...@foxmail.com> 于2020年12月21日周一 上午9:15写道:
> 因为表格样式被吃掉了,所以看不清,用图片说明下。
> https://i.bmp.ovh/imgs/2020/12/78d7dee70d88ebc9.png
>
> 定义了3秒的滚动窗口
> 第一条消息的eventTime是9:00:01,是在系统实际时间9:00:01收到的。
> 第二条消息的eventTime是9:00:02,但是是在系统实际时间9:00:11分收到的。
>
> 想要达成的目标是在系统时间9:00:05时把这一窗口关闭掉进行运算,忽略迟到的第二条消息,更不必要等到第3条消息触发到下一个窗口的时间了再关闭这个窗口。
> 找了下用ProcessingTimeoutTrigger可以达到目的,不过不知道有没有更详细的文档说明trigger怎么用的。
>
>
> guoliubin85@foxmail.com
>
> 发件人: 赵一旦
> 发送时间: 2020-12-20 23:30
> 收件人: user-zh
> 主题: Re: 如何通过现实时间控制事件时间的窗口
> 描述比较乱,看不懂。
>
> guoliubin85@foxmail.com <gu...@foxmail.com> 于2020年12月17日周四 下午2:16写道:
>
> > Hi,
> > 我们现在以eventTime作为时间标准,每3秒做一次TumbleWindow,数据假设如下
> > 系统时间
> > 与上一条间隔
> > 事件时间
> > 与上一条间隔
> > 9:00:01
> >
> > 9:00:01
> >
> > 9:00:11
> > 10s
> > 9:00:02
> > 1s
> > 9:00:12
> > 1s
> > 9:00:12
> > 10s
> > 从事件时间上看,第一条和第二条数据是归集到同一窗口的。
> > 不过现在的处理需要在窗口有第一条数据后系统时间超时4s以上就强制关闭该窗口,即在系统时间9:00:05时关闭窗口,忽略掉第二条数据。
> > 请问这种情况需要怎么生成watermark?
> > 使用过
> > WatermarkStrategy.forBoundedOutOfOrderness(Duration.ofSeconds(4L))
> > 或者
> >
> >
> WatermarkStrategy.forMonotonousTimestamps().withIdleness(Duration.ofSeconds(4L))
> > 结果都把第一条和第二条数据归集到同一个窗口中了,
> > 都没有达到预想的结果。
> > 要如何设置才能在窗口中仅有一条数据而忽略第二条数据?
> >
> >
> > guoliubin85@foxmail.com
> >
>
Re: Re: 如何通过现实时间控制事件时间的窗口
Posted by "guoliubin85@foxmail.com" <gu...@foxmail.com>.
因为表格样式被吃掉了,所以看不清,用图片说明下。
https://i.bmp.ovh/imgs/2020/12/78d7dee70d88ebc9.png
定义了3秒的滚动窗口
第一条消息的eventTime是9:00:01,是在系统实际时间9:00:01收到的。
第二条消息的eventTime是9:00:02,但是是在系统实际时间9:00:11分收到的。
想要达成的目标是在系统时间9:00:05时把这一窗口关闭掉进行运算,忽略迟到的第二条消息,更不必要等到第3条消息触发到下一个窗口的时间了再关闭这个窗口。
找了下用ProcessingTimeoutTrigger可以达到目的,不过不知道有没有更详细的文档说明trigger怎么用的。
guoliubin85@foxmail.com
发件人: 赵一旦
发送时间: 2020-12-20 23:30
收件人: user-zh
主题: Re: 如何通过现实时间控制事件时间的窗口
描述比较乱,看不懂。
guoliubin85@foxmail.com <gu...@foxmail.com> 于2020年12月17日周四 下午2:16写道:
> Hi,
> 我们现在以eventTime作为时间标准,每3秒做一次TumbleWindow,数据假设如下
> 系统时间
> 与上一条间隔
> 事件时间
> 与上一条间隔
> 9:00:01
>
> 9:00:01
>
> 9:00:11
> 10s
> 9:00:02
> 1s
> 9:00:12
> 1s
> 9:00:12
> 10s
> 从事件时间上看,第一条和第二条数据是归集到同一窗口的。
> 不过现在的处理需要在窗口有第一条数据后系统时间超时4s以上就强制关闭该窗口,即在系统时间9:00:05时关闭窗口,忽略掉第二条数据。
> 请问这种情况需要怎么生成watermark?
> 使用过
> WatermarkStrategy.forBoundedOutOfOrderness(Duration.ofSeconds(4L))
> 或者
>
> WatermarkStrategy.forMonotonousTimestamps().withIdleness(Duration.ofSeconds(4L))
> 结果都把第一条和第二条数据归集到同一个窗口中了,
> 都没有达到预想的结果。
> 要如何设置才能在窗口中仅有一条数据而忽略第二条数据?
>
>
> guoliubin85@foxmail.com
>
Re: 如何通过现实时间控制事件时间的窗口
Posted by 赵一旦 <hi...@gmail.com>.
描述比较乱,看不懂。
guoliubin85@foxmail.com <gu...@foxmail.com> 于2020年12月17日周四 下午2:16写道:
> Hi,
> 我们现在以eventTime作为时间标准,每3秒做一次TumbleWindow,数据假设如下
> 系统时间
> 与上一条间隔
> 事件时间
> 与上一条间隔
> 9:00:01
>
> 9:00:01
>
> 9:00:11
> 10s
> 9:00:02
> 1s
> 9:00:12
> 1s
> 9:00:12
> 10s
> 从事件时间上看,第一条和第二条数据是归集到同一窗口的。
> 不过现在的处理需要在窗口有第一条数据后系统时间超时4s以上就强制关闭该窗口,即在系统时间9:00:05时关闭窗口,忽略掉第二条数据。
> 请问这种情况需要怎么生成watermark?
> 使用过
> WatermarkStrategy.forBoundedOutOfOrderness(Duration.ofSeconds(4L))
> 或者
>
> WatermarkStrategy.forMonotonousTimestamps().withIdleness(Duration.ofSeconds(4L))
> 结果都把第一条和第二条数据归集到同一个窗口中了,
> 都没有达到预想的结果。
> 要如何设置才能在窗口中仅有一条数据而忽略第二条数据?
>
>
> guoliubin85@foxmail.com
>