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 "18579099920@163.com" <18...@163.com> on 2020/07/03 06:02:11 UTC

如何在窗口关闭的时候清除状态

大家好,我有一个需求,我在ProcessWindowFunction算子中定义了一个valueState,我希望在窗口关闭的时候能够将状态清理。我应该在哪里清理呢?
1.刚开始我选择在ProcessWindowFunction算子的process方法中清理,但是这里会有一个问题,我事件时间窗口开1天,我写了一个trigger,每隔一个小时输出一次结果。
如果我在process方法中清理,每隔一个小时就会被清理,而valueState中存的是我的中间结果,应该在窗口关闭的时候被清理(即一天之后)。这应该怎么办呢?



18579099920@163.com

Re: 如何在窗口关闭的时候清除状态

Posted by zhisheng <zh...@gmail.com>.
你试试在 clear 方法中清理

18579099920@163.com <18...@163.com> 于2020年7月3日周五 下午2:02写道:

>
> 大家好,我有一个需求,我在ProcessWindowFunction算子中定义了一个valueState,我希望在窗口关闭的时候能够将状态清理。我应该在哪里清理呢?
>
> 1.刚开始我选择在ProcessWindowFunction算子的process方法中清理,但是这里会有一个问题,我事件时间窗口开1天,我写了一个trigger,每隔一个小时输出一次结果。
>
> 如果我在process方法中清理,每隔一个小时就会被清理,而valueState中存的是我的中间结果,应该在窗口关闭的时候被清理(即一天之后)。这应该怎么办呢?
>
>
>
> 18579099920@163.com
>

Re: Re:Re: 如何在窗口关闭的时候清除状态

Posted by Yun Tang <my...@live.com>.
Hi

TTL需要state descriptor明确声明enableTimeToLive[1],而一旦使用window,window内使用的timer和window state实际上不暴露给用户 的,没法开启TTL,二者在使用方式上存在一定互斥。从语义上来说TTL可以清理过期数据,而默认的window实现都会清理已经trigger过的window内的state,所以二者在语义上其实也是有一定互斥的。

从性能角度考虑,一天的窗口显得有点大了,往往性能不好,如果能把类似逻辑迁移到TTL上实现会对性能更友好。

[1] https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/state/state.html#state-time-to-live-ttl

祝好
唐云

________________________________
From: flink小猪 <18...@163.com>
Sent: Tuesday, July 7, 2020 10:44
To: user-zh@flink.apache.org <us...@flink.apache.org>
Subject: Re:Re: 如何在窗口关闭的时候清除状态




[1].设置TTL应该也能达到相同的效果,我还是希望在窗口关闭的时候能够做一些自定义的操作(比如这里的清除状态,也许之后会有其他的操作TTL就不一样好用了)
[2].KeyedProcessFunction,应该自己注册定时器把,在我的代码里面是timeWIndow().trigger().process(), ProcessWindowFunction方法我只需要处理逻辑即可,不需要管定时的窗口。














在 2020-07-05 11:56:03,"Congxian Qiu" <qc...@gmail.com> 写道:
>看上去这个需求是 一天的窗口,每个小时都 trigger 一次,希望 state 在 1 天之后进行清理。
>你可以尝试一下 TTL[1] State
>另外想问一下,你自己写 ProcessWindowFunction 的话,为什么不考虑 KeyedProcessFunction[2] 呢
>
>[1]
>https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/dev/stream/state/state.html#%E7%8A%B6%E6%80%81%E6%9C%89%E6%95%88%E6%9C%9F-ttl
>[2]
>https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/dev/stream/operators/process_function.html#the-keyedprocessfunction
>Best,
>Congxian
>
>
>JasonLee <17...@163.com> 于2020年7月4日周六 下午8:29写道:
>
>> 设置一下状态过期的时间呢
>>
>>
>> | |
>> JasonLee
>> |
>> |
>> 邮箱:17610775726@163.com
>> |
>>
>> Signature is customized by Netease Mail Master
>>
>> 在2020年07月03日 14:02,18579099920@163.com 写道:
>>
>> 大家好,我有一个需求,我在ProcessWindowFunction算子中定义了一个valueState,我希望在窗口关闭的时候能够将状态清理。我应该在哪里清理呢?
>>
>> 1.刚开始我选择在ProcessWindowFunction算子的process方法中清理,但是这里会有一个问题,我事件时间窗口开1天,我写了一个trigger,每隔一个小时输出一次结果。
>>
>> 如果我在process方法中清理,每隔一个小时就会被清理,而valueState中存的是我的中间结果,应该在窗口关闭的时候被清理(即一天之后)。这应该怎么办呢?
>>
>>
>>
>> 18579099920@163.com
>>

Re:Re: 如何在窗口关闭的时候清除状态

Posted by flink小猪 <18...@163.com>.


[1].设置TTL应该也能达到相同的效果,我还是希望在窗口关闭的时候能够做一些自定义的操作(比如这里的清除状态,也许之后会有其他的操作TTL就不一样好用了)
[2].KeyedProcessFunction,应该自己注册定时器把,在我的代码里面是timeWIndow().trigger().process(), ProcessWindowFunction方法我只需要处理逻辑即可,不需要管定时的窗口。














在 2020-07-05 11:56:03,"Congxian Qiu" <qc...@gmail.com> 写道:
>看上去这个需求是 一天的窗口,每个小时都 trigger 一次,希望 state 在 1 天之后进行清理。
>你可以尝试一下 TTL[1] State
>另外想问一下,你自己写 ProcessWindowFunction 的话,为什么不考虑 KeyedProcessFunction[2] 呢
>
>[1]
>https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/dev/stream/state/state.html#%E7%8A%B6%E6%80%81%E6%9C%89%E6%95%88%E6%9C%9F-ttl
>[2]
>https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/dev/stream/operators/process_function.html#the-keyedprocessfunction
>Best,
>Congxian
>
>
>JasonLee <17...@163.com> 于2020年7月4日周六 下午8:29写道:
>
>> 设置一下状态过期的时间呢
>>
>>
>> | |
>> JasonLee
>> |
>> |
>> 邮箱:17610775726@163.com
>> |
>>
>> Signature is customized by Netease Mail Master
>>
>> 在2020年07月03日 14:02,18579099920@163.com 写道:
>>
>> 大家好,我有一个需求,我在ProcessWindowFunction算子中定义了一个valueState,我希望在窗口关闭的时候能够将状态清理。我应该在哪里清理呢?
>>
>> 1.刚开始我选择在ProcessWindowFunction算子的process方法中清理,但是这里会有一个问题,我事件时间窗口开1天,我写了一个trigger,每隔一个小时输出一次结果。
>>
>> 如果我在process方法中清理,每隔一个小时就会被清理,而valueState中存的是我的中间结果,应该在窗口关闭的时候被清理(即一天之后)。这应该怎么办呢?
>>
>>
>>
>> 18579099920@163.com
>>

回复: 如何在窗口关闭的时候清除状态

Posted by kcz <57...@qq.com>.
用了window一天的窗口,这个开窗flink会自己将一天的数据自动清除的吧




------------------&nbsp;原始邮件&nbsp;------------------
发件人:&nbsp;"Congxian Qiu"<qcx978132955@gmail.com&gt;;
发送时间:&nbsp;2020年7月5日(星期天) 中午11:56
收件人:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;

主题:&nbsp;Re: 如何在窗口关闭的时候清除状态



看上去这个需求是 一天的窗口,每个小时都 trigger 一次,希望 state 在 1 天之后进行清理。
你可以尝试一下 TTL[1] State
另外想问一下,你自己写 ProcessWindowFunction 的话,为什么不考虑 KeyedProcessFunction[2] 呢

[1]
https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/dev/stream/state/state.html#%E7%8A%B6%E6%80%81%E6%9C%89%E6%95%88%E6%9C%9F-ttl
[2]
https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/dev/stream/operators/process_function.html#the-keyedprocessfunction
Best,
Congxian


JasonLee <17610775726@163.com&gt; 于2020年7月4日周六 下午8:29写道:

&gt; 设置一下状态过期的时间呢
&gt;
&gt;
&gt; | |
&gt; JasonLee
&gt; |
&gt; |
&gt; 邮箱:17610775726@163.com
&gt; |
&gt;
&gt; Signature is customized by Netease Mail Master
&gt;
&gt; 在2020年07月03日 14:02,18579099920@163.com 写道:
&gt;
&gt; 大家好,我有一个需求,我在ProcessWindowFunction算子中定义了一个valueState,我希望在窗口关闭的时候能够将状态清理。我应该在哪里清理呢?
&gt;
&gt; 1.刚开始我选择在ProcessWindowFunction算子的process方法中清理,但是这里会有一个问题,我事件时间窗口开1天,我写了一个trigger,每隔一个小时输出一次结果。
&gt;
&gt; 如果我在process方法中清理,每隔一个小时就会被清理,而valueState中存的是我的中间结果,应该在窗口关闭的时候被清理(即一天之后)。这应该怎么办呢?
&gt;
&gt;
&gt;
&gt; 18579099920@163.com
&gt;

Re: 如何在窗口关闭的时候清除状态

Posted by Congxian Qiu <qc...@gmail.com>.
看上去这个需求是 一天的窗口,每个小时都 trigger 一次,希望 state 在 1 天之后进行清理。
你可以尝试一下 TTL[1] State
另外想问一下,你自己写 ProcessWindowFunction 的话,为什么不考虑 KeyedProcessFunction[2] 呢

[1]
https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/dev/stream/state/state.html#%E7%8A%B6%E6%80%81%E6%9C%89%E6%95%88%E6%9C%9F-ttl
[2]
https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/dev/stream/operators/process_function.html#the-keyedprocessfunction
Best,
Congxian


JasonLee <17...@163.com> 于2020年7月4日周六 下午8:29写道:

> 设置一下状态过期的时间呢
>
>
> | |
> JasonLee
> |
> |
> 邮箱:17610775726@163.com
> |
>
> Signature is customized by Netease Mail Master
>
> 在2020年07月03日 14:02,18579099920@163.com 写道:
>
> 大家好,我有一个需求,我在ProcessWindowFunction算子中定义了一个valueState,我希望在窗口关闭的时候能够将状态清理。我应该在哪里清理呢?
>
> 1.刚开始我选择在ProcessWindowFunction算子的process方法中清理,但是这里会有一个问题,我事件时间窗口开1天,我写了一个trigger,每隔一个小时输出一次结果。
>
> 如果我在process方法中清理,每隔一个小时就会被清理,而valueState中存的是我的中间结果,应该在窗口关闭的时候被清理(即一天之后)。这应该怎么办呢?
>
>
>
> 18579099920@163.com
>

回复:如何在窗口关闭的时候清除状态

Posted by JasonLee <17...@163.com>.
设置一下状态过期的时间呢


| |
JasonLee
|
|
邮箱:17610775726@163.com
|

Signature is customized by Netease Mail Master

在2020年07月03日 14:02,18579099920@163.com 写道:
大家好,我有一个需求,我在ProcessWindowFunction算子中定义了一个valueState,我希望在窗口关闭的时候能够将状态清理。我应该在哪里清理呢?
1.刚开始我选择在ProcessWindowFunction算子的process方法中清理,但是这里会有一个问题,我事件时间窗口开1天,我写了一个trigger,每隔一个小时输出一次结果。
如果我在process方法中清理,每隔一个小时就会被清理,而valueState中存的是我的中间结果,应该在窗口关闭的时候被清理(即一天之后)。这应该怎么办呢?



18579099920@163.com