删除Flink Mapstate中的TTL过期密钥

时间:2017-08-20 15:48:17

标签: apache-flink

我需要能够从地图状态中移除旧密钥,这些密钥早于固定的时间量。 我目前在关键状态映射中保存每个事件的时间戳,并且我希望有一个同步过程,它将删除这些陈旧的密钥。

我正在使用RocksDB作为状态后端,我不认为RocksDB的Java API支持使用TTL打开here

所以我的问题是:

  • 是否可以拥有一个可以访问Mapstate的异步线程,因为它在运算符函数中运行?
  • 在这种情况下有更好的做法吗?

提前致谢,

2 个答案:

答案 0 :(得分:3)

在Flink中使状态到期的一种直接方法是使用ProcessFunction运算符来保持状态。然后,您可以使用计时器(处理时间计时器或事件时间计时器,具体取决于对您的应用程序有意义的计时器)并使用onTimer方法清除状态。

答案 1 :(得分:0)

从Flink 1.6.0版本开始,已实现状态TTL功能。它允许为状态后端中的记录显式定义TTL。问题是,在读取密钥时,密钥的删除很懒。如果没有访问密钥,它将保留在那里。该限制很可能在将来的版本中删除。

State Time-To-Live (TTL) Flink Documentation

State TTL for Apache Flink: How to Limit the Lifetime of State