我需要的能力,以删除旧的关键点,从Map状态,这是旧的超过一个固定的时间量。我目前将每个事件的时间戳保存在密钥状态Map中,我希望有一个ansyncronous进程来删除这些过时的密钥。
我使用rocksdb作为状态后端,我不认为rocksdb的javaapi支持使用ttl的open。
所以我的问题是:
既然mapstate在操作符函数中运行,那么异步线程有权访问它吗?
在这种情况下有更好的做法吗?
提前谢谢,
我需要的能力,以删除旧的关键点,从Map状态,这是旧的超过一个固定的时间量。我目前将每个事件的时间戳保存在密钥状态Map中,我希望有一个ansyncronous进程来删除这些过时的密钥。
我使用rocksdb作为状态后端,我不认为rocksdb的javaapi支持使用ttl的open。
所以我的问题是:
既然mapstate在操作符函数中运行,那么异步线程有权访问它吗?
在这种情况下有更好的做法吗?
提前谢谢,
2条答案
按热度按时间monwx1rj1#
作为flink1.6.0版本,状态ttl特性已经实现。它允许显式地为状态后端中的记录定义ttl。问题是,在读取键时,删除键是懒惰的。如果钥匙未被取用,它将留在那里。该限制很可能在将来的版本中被删除。
状态生存时间(ttl)flink文档
apacheflink的状态ttl:如何限制状态的生存期
inb24sb22#
在flink中终止状态的一种简单方法是使用
ProcessFunction
操作员保持状态。然后可以使用计时器(处理时间计时器或事件时间计时器,具体取决于对应用程序有意义的内容)并清除onTimer
方法。