我正在使用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()) { ... }
1条答案
按热度按时间bhmjp9jg1#
答案1
答案是1。对于liststate,修剪已完成
myListState.get();
.答案2
“每个条目ttl”表示超时应用于单个条目而不是整个集合。对于您的示例,假设在读取插入a后经过的10秒时,它将迭代
b
以及c
.a
在这种情况下会被删掉。