我正在使用Apache Flink 1.6.0实现概念验证流处理系统,并存储一个按键分区的接收事件列表ListState。(不要担心我为什么这样做,只是在这里和我一起工作。)我StateTtlConfig有一套相应的ListStateDescriptor。 根据文件:
“所有状态集合类型都支持每个条目的TTL。这意味着列表元素和映射条目将独立到期。”
“目前,过期值只有在明确读出时才会被删除,例如通过调用ValueState.value()。”
问题1
以下哪一项构成了对以下内容的解读ListState:
请求迭代器但不使用它 - myListState.get();。
实际上使用迭代器 - for (MyItem i : myListState.get()) { ... }
问题2
“每次进入TTL” 究竟意味着什么?具体来说,我要问的是以下内容:
假设我有一个特定的实例ListState。描述符的TTL为10秒。我插入一个'a'。两秒钟后,我插入'b'。九秒后我插入'c'。如果我迭代这个ListState,将返回哪些项目?
换一种说法:
ListState 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()) { ... }
“per-entry TTL”表示超时应用于单个条目而不是整个集合。对于你的例子,假设在读取10秒后,因为插入a将迭代b并且c。a在这种情况下将被修改。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。