ListState 设置 TTL 会在 list 中删除之前的记录吗

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

ListState 设置 TTL 会在 list 中删除之前的记录吗

wanglei2@geekplus.com
考虑下面的场景:

KeyBy userId, 把该 userId 所用的相关记录存起来放在 ListState 中
private transient ListState<String> list;

@Override
public void processElement(Tuple2<String, String> value, Context ctx, Collector<String> out)
    throws Exception {
    list.add(value.f1);
}
TTL 设为 7 天。
如果这个 userId 超过 7 天没有任何消息,那这个 userId 相应的 ListState 会被删除。
但如果这 userId 一直持续不断的有消息过来,那 7 天之前 被 add 到 list 的记录会不会被删除呢?

谢谢,
王磊


[hidden email]
Reply | Threaded
Open this post in threaded view
|

回复:ListState 设置 TTL 会在 list 中删除之前的记录吗

吴磊-2
会删除。引用官网的一段话:
&nbsp; "状态上次的修改时间会和数据一起保存在 state backend 中,因此开启该特性会增加状态数据的存储。 Heap state backend 会额外存储一个包括用户状态以及时间戳的 Java 对象,RocksDB state backend 会在每个状态值(list 或者 map 的每个元素)序列化后增加 8 个字节。"


可参考:https://github.com/apache/flink/blob/master/docs/dev/stream/state/state.zh.md


by wulei


------------------&nbsp;原始邮件&nbsp;------------------
发件人:                                                                                                                        "user-zh"                                                                                    <[hidden email]&gt;;
发送时间:&nbsp;2020年9月18日(星期五) 上午10:49
收件人:&nbsp;"user-zh"<[hidden email]&gt;;

主题:&nbsp;ListState 设置 TTL 会在 list 中删除之前的记录吗



考虑下面的场景:

KeyBy userId, 把该 userId 所用的相关记录存起来放在 ListState 中
private transient ListState<String&gt; list;

@Override
public void processElement(Tuple2<String, String&gt; value, Context ctx, Collector<String&gt; out)
&nbsp;&nbsp;&nbsp; throws Exception {
&nbsp;&nbsp;&nbsp; list.add(value.f1);
}
TTL 设为 7 天。
如果这个 userId 超过 7 天没有任何消息,那这个 userId 相应的 ListState 会被删除。
但如果这 userId 一直持续不断的有消息过来,那 7 天之前 被 add 到 list 的记录会不会被删除呢?

谢谢,
王磊


[hidden email]