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小猪 <[email protected]> Sent: Tuesday, July 7, 2020 10:44 To: [email protected] <[email protected]> Subject: Re:Re: 如何在窗口关闭的时候清除状态 [1].设置TTL应该也能达到相同的效果,我还是希望在窗口关闭的时候能够做一些自定义的操作(比如这里的清除状态,也许之后会有其他的操作TTL就不一样好用了) [2].KeyedProcessFunction,应该自己注册定时器把,在我的代码里面是timeWIndow().trigger().process(), ProcessWindowFunction方法我只需要处理逻辑即可,不需要管定时的窗口。 在 2020-07-05 11:56:03,"Congxian Qiu" <[email protected]> 写道: >看上去这个需求是 一天的窗口,每个小时都 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 <[email protected]> 于2020年7月4日周六 下午8:29写道: > >> 设置一下状态过期的时间呢 >> >> >> | | >> JasonLee >> | >> | >> 邮箱:[email protected] >> | >> >> Signature is customized by Netease Mail Master >> >> 在2020年07月03日 14:02,[email protected] 写道: >> >> 大家好,我有一个需求,我在ProcessWindowFunction算子中定义了一个valueState,我希望在窗口关闭的时候能够将状态清理。我应该在哪里清理呢? >> >> 1.刚开始我选择在ProcessWindowFunction算子的process方法中清理,但是这里会有一个问题,我事件时间窗口开1天,我写了一个trigger,每隔一个小时输出一次结果。 >> >> 如果我在process方法中清理,每隔一个小时就会被清理,而valueState中存的是我的中间结果,应该在窗口关闭的时候被清理(即一天之后)。这应该怎么办呢? >> >> >> >> [email protected] >>
