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