我需要能够从映射状态中删除早于固定时间的旧键。 我目前将每个事件的时间戳保留在密钥状态图中,并且我希望有一个异步过程来删除这些过时的密钥。
我使用 RocksDB 作为状态后端,我不认为 RocksDB 的 Java API 支持此处所述的 TTL 开放。
所以我的问题是:
- 是否有可能拥有一个可以访问 Mapstate 的异步线程,因为它在运算符函数中运行?
- 在这种情况下有更好的做法吗?
提前感谢,
在 Flink 中过期状态的一种简单方法是使用ProcessFunction
运算符来保存状态。然后,可以使用计时器(处理时间计时器或事件计时器,具体取决于对应用程序有意义的内容(并清除onTimer
方法中的状态。
作为 Flink 1.6.0 版本,状态 TTL 功能已经实现。它允许为状态后端中的记录显式定义 TTL。问题是,当读取密钥时,删除密钥会延迟发生。如果未访问密钥,它将保留在那里。该限制很可能在将来的版本中删除。
状态生存时间 (TTL( Flink 文档
Apache Flink 的状态 TTL:如何限制状态的生存期