apache flink 1.6.0-statettlconfig和liststate

elcex8rz  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(412)

我正在使用ApacheFlink1.6.0实现一个概念验证流处理系统,并在一个 ListState . (别担心我为什么要这样做,就在这里和我一起工作。)我有一个 StateTtlConfig 在相应的 ListStateDescriptor . 根据文件:
“所有状态集合类型都支持每项TTL。这意味着列表元素和Map条目将独立过期。”
“目前,过期的值只有在显式读取时才会被删除,例如通过调用 ValueState.value() ."
问题1
以下哪一项构成了 ListState :
请求迭代器但不使用它- myListState.get(); .
实际上使用迭代器- for (MyItem i : myListState.get()) { ... } 问题2
“每项ttl”实际上是什么意思?具体来说,我要问的是:
假设我有一个 ListState<Character> . 描述符的ttl为10秒。我插入一个 'a' . 两秒钟后,我插入 'b' . 九秒钟后我插入 'c' . 如果我重复这个 ListState ,将退回哪些项目?
换句话说:

ListState<Character> ls = getRuntimeContext().getListState(myDescriptor);

ls.add('a');

// ...two seconds later...
ls.add('b');

// ...nine seconds later...
ls.add('c');

// Does this iterate over 'a', 'b', 'c'
// or just 'b' and 'c'?
for (Character myChar : ls.get()) { ... }
bhmjp9jg

bhmjp9jg1#

答案1
答案是1。对于liststate,修剪已完成 myListState.get(); .
答案2
“每个条目ttl”表示超时应用于单个条目而不是整个集合。对于您的示例,假设在读取插入a后经过的10秒时,它将迭代 b 以及 c . a 在这种情况下会被删掉。

相关问题