开发者社区> 问答> 正文

Apache Flink 1.6.0 - StateTtlConfig和ListState

我正在使用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()) { ... }

展开
收起
社区小助手 2018-12-11 15:50:06 3606 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    “per-entry TTL”表示超时应用于单个条目而不是整个集合。对于你的例子,假设在读取10秒后,因为插入a将迭代b并且c。a在这种情况下将被修改。

    2019-07-17 23:19:48
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Flink CDC Meetup PPT - 龚中强 立即下载
Flink CDC Meetup PPT - 王赫 立即下载
Flink CDC Meetup PPT - 覃立辉 立即下载

相关镜像