flink state ttl状态清理和重新计算的疑问

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

flink state ttl状态清理和重新计算的疑问

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小时后,状态开始清理。这个感觉不符合预期?求大佬帮忙确认下。
Reply | Threaded
Open this post in threaded view
|

Re:Re: flink state ttl状态清理和重新计算的疑问

sunfulin



hi,
我的理解也是按每个key的时间来的,没仔细看具体实现。













在 2020-08-15 17:28:43,"art" <[hidden email]> 写道:

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 <[hidden email]> 写道:


hi,
有可能这个是默认实现。我还发现另外一个问题,如果我不使用minibatch,发现作业的状态貌似不生效。导致输出了多条数据。不知道这是为何。











在 2020-08-15 13:30:24,"superainbower" <[hidden email]> 写道:

新手感觉应该是统一启动后满足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小时后,状态开始清理。这个感觉不符合预期?求大佬帮忙确认下。



 


Reply | Threaded
Open this post in threaded view
|

Re: Re: flink state ttl状态清理和重新计算的疑问

Benchao Li-2
是按照每个key来清理的。清理时机是跟它最后的更新时间有关系,
也就是在最后一次更新加上state retention时间这么长的时间后会清理。

最开始实现状态清理的时候,用的都是timer来清理,也就是每个key下都有自己的timer。
现在是比较推荐使用state本身的TTL来做状态清理,并且用的是UpdateType.OnCreateAndWrite。
不过现在还没有完全把每个算子和function都重构成这样子,所以还有些老的算子还是用的
timer来实现的。

sunfulin <[hidden email]> 于2020年8月15日周六 下午6:12写道:

>
>
>
> hi,
> 我的理解也是按每个key的时间来的,没仔细看具体实现。
>
>
>
>
>
>
>
>
>
>
>
>
>
> 在 2020-08-15 17:28:43,"art" <[hidden email]> 写道:
>
> 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 <[hidden email]> 写道:
>
>
> hi,
> 有可能这个是默认实现。我还发现另外一个问题,如果我不使用minibatch,发现作业的状态貌似不生效。导致输出了多条数据。不知道这是为何。
>
>
>
>
>
>
>
>
>
>
>
> 在 2020-08-15 13:30:24,"superainbower" <[hidden email]> 写道:
>
> 新手感觉应该是统一启动后满足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
Reply | Threaded
Open this post in threaded view
|

Re: Re: flink state ttl状态清理和重新计算的疑问

nobleyd
@Li Benchao
(1)
如果不是每个key一个timer,但超时仍然应该是key级别的吧,只是说清理机制上不是每个key设置一个timer去清理。
比如有个全局的其他机制定期扫描清理,但超时时间应该还是key级别。

(2)
关于超时时间,对于一个key,他的value每次更新超时都会重新计算,还是永远按照这个key创建时时间开始计算呢。

Benchao Li <[hidden email]> 于2020年8月15日周六 下午7:27写道:

> 是按照每个key来清理的。清理时机是跟它最后的更新时间有关系,
> 也就是在最后一次更新加上state retention时间这么长的时间后会清理。
>
> 最开始实现状态清理的时候,用的都是timer来清理,也就是每个key下都有自己的timer。
> 现在是比较推荐使用state本身的TTL来做状态清理,并且用的是UpdateType.OnCreateAndWrite。
> 不过现在还没有完全把每个算子和function都重构成这样子,所以还有些老的算子还是用的
> timer来实现的。
>
> sunfulin <[hidden email]> 于2020年8月15日周六 下午6:12写道:
>
> >
> >
> >
> > hi,
> > 我的理解也是按每个key的时间来的,没仔细看具体实现。
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > 在 2020-08-15 17:28:43,"art" <[hidden email]> 写道:
> >
> > 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 <[hidden email]> 写道:
> >
> >
> > hi,
> > 有可能这个是默认实现。我还发现另外一个问题,如果我不使用minibatch,发现作业的状态貌似不生效。导致输出了多条数据。不知道这是为何。
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > 在 2020-08-15 13:30:24,"superainbower" <[hidden email]> 写道:
> >
> > 新手感觉应该是统一启动后满足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
>
Reply | Threaded
Open this post in threaded view
|

Re: Re: flink state ttl状态清理和重新计算的疑问

Benchao Li-2
1) 这个应该还是按照每个key来单独清理的
2)是按照最后的更新时间,也就是每次更新的时候超时时间重新开始计算

赵一旦 <[hidden email]> 于2020年8月17日周一 上午11:51写道:

> @Li Benchao
> (1)
> 如果不是每个key一个timer,但超时仍然应该是key级别的吧,只是说清理机制上不是每个key设置一个timer去清理。
> 比如有个全局的其他机制定期扫描清理,但超时时间应该还是key级别。
>
> (2)
> 关于超时时间,对于一个key,他的value每次更新超时都会重新计算,还是永远按照这个key创建时时间开始计算呢。
>
> Benchao Li <[hidden email]> 于2020年8月15日周六 下午7:27写道:
>
> > 是按照每个key来清理的。清理时机是跟它最后的更新时间有关系,
> > 也就是在最后一次更新加上state retention时间这么长的时间后会清理。
> >
> > 最开始实现状态清理的时候,用的都是timer来清理,也就是每个key下都有自己的timer。
> > 现在是比较推荐使用state本身的TTL来做状态清理,并且用的是UpdateType.OnCreateAndWrite。
> > 不过现在还没有完全把每个算子和function都重构成这样子,所以还有些老的算子还是用的
> > timer来实现的。
> >
> > sunfulin <[hidden email]> 于2020年8月15日周六 下午6:12写道:
> >
> > >
> > >
> > >
> > > hi,
> > > 我的理解也是按每个key的时间来的,没仔细看具体实现。
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > 在 2020-08-15 17:28:43,"art" <[hidden email]> 写道:
> > >
> > > 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 <[hidden email]> 写道:
> > >
> > >
> > > hi,
> > > 有可能这个是默认实现。我还发现另外一个问题,如果我不使用minibatch,发现作业的状态貌似不生效。导致输出了多条数据。不知道这是为何。
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > 在 2020-08-15 13:30:24,"superainbower" <[hidden email]> 写道:
> > >
> > >
> 新手感觉应该是统一启动后满足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
> >
>


--

Best,
Benchao Li