是按照每个key来清理的。清理时机是跟它最后的更新时间有关系, 也就是在最后一次更新加上state retention时间这么长的时间后会清理。
最开始实现状态清理的时候,用的都是timer来清理,也就是每个key下都有自己的timer。 现在是比较推荐使用state本身的TTL来做状态清理,并且用的是UpdateType.OnCreateAndWrite。 不过现在还没有完全把每个算子和function都重构成这样子,所以还有些老的算子还是用的 timer来实现的。 sunfulin <[email protected]> 于2020年8月15日周六 下午6:12写道: > > > > hi, > 我的理解也是按每个key的时间来的,没仔细看具体实现。 > > > > > > > > > > > > > > 在 2020-08-15 17:28:43,"art" <[email protected]> 写道: > > The Idle State Retention Time parameters define for how long the state of > a key is retained without being updated before it is removed. > 我感觉我的理解错了,这个官方描述不是state of a key, 应该是每个key都有自己的过期时间吧,那么你那个状态不是应该以user登陆后 开始 > 计时,不应该是作业启动吧,还望有个大佬可以解惑 > > > > 在 2020年8月15日,下午3:06,sunfulin <[email protected]> 写道: > > > hi, > 有可能这个是默认实现。我还发现另外一个问题,如果我不使用minibatch,发现作业的状态貌似不生效。导致输出了多条数据。不知道这是为何。 > > > > > > > > > > > > 在 2020-08-15 13:30:24,"superainbower" <[email protected]> 写道: > > 新手感觉应该是统一启动后满足TTL设置的时间就会全部清理,如果不这样,你每一个user的清理时间都不一样,那不得记录成百上千的user的更新时间 > > 在2020年08月15日 13:15,sunfulin 写道: > hi,community, > 想确认下idlestateretention的配置及生效机制,我有一个作业,设置了TTL为(10小时,10小时+5分钟)。假设我的作业是今天12:00启动,作业逻辑是统计当日10点后每个userId第一次登陆的时间:select > userId, first_value(xxx) from source group by userId, > date_format(eventtime, > 'yyyy-MM-dd')。那么我的作业的状态清理时机是从启动时间开始10小时之后么?还是会按照状态的数据更新的时间+10小时作为清理时间? > 我使用flink 1.10.1版本,初步观察到的现象是,启动时间开始大概10小时后,状态开始清理。这个感觉不符合预期?求大佬帮忙确认下。 > > > > > > > -- Best, Benchao Li
