如果一把钥匙看不到,但rocksdb有关于这把钥匙的状态,会发生什么



假设我有这样的过程函数(带有rocksdb状态后端(:

public class Test extends KeyedProcessFunction<...>
{
private transient ValueState<Integer> ...;
...
@Override
public void open(Configuration parameters) throws Exception
{
StateTtlConfig ttlConfig = StateTtlConfig
.newBuilder(Time.minutes(10))
.setUpdateType(StateTtlConfig.UpdateType.OnCreateAndWrite)
.setStateVisibility(StateTtlConfig.StateVisibility.NeverReturnExpired)
.cleanupInRocksdbCompactFilter(1000)
.build();
ValueStateDescriptor<Integer> testDescr = new ValueStateDescriptor<Integer>(
"test",
TypeInformation.of(Integer.class)
);
testDescr.enableTimeToLive(ttlConfig);
...
}
}
kafkaSource.keyby(object -> object.getKey()).process(new Test()))...;

假设这是一个无边界流应用程序比方说,我看到了名为";橙色";,但是只有一次(或者只是假设进程函数为键"orange"调用一次(;橙色";。在这种情况下,键";橙色";会永远留在摇滚乐队吗?

非活动键的状态"橙色";将在第一次RocksDB压缩期间从RocksDB中删除,该压缩发生在该密钥的状态创建后10分钟之后(因为TTL配置生成器配置了10分钟TTL超时(。在此之前,状态将在RocksDB中徘徊,但由于您已经配置了StateVisibility.NeverReturnExpired,如果您尝试访问它,Flink将假装它不在那里。

相关内容

  • 没有找到相关文章

最新更新