Flink提供管理状态的TTL配置,使用RocksDB作为后端时,它在自定义压缩过滤器中执行清理(如果我理解正确的话)。然而,在ProcessWindowFunction
的键控窗口状态下,我们期望重写clear
方法并显式调用
context.windowState().*.clear()
如果状态描述符没有配置TTL,在clear
回调后是否仍然发生清理?如果不是,这种类型的状态的清理仅取决于RocksDB的级别大小,默认设置是什么,是否可配置?
如果状态描述符没有配置TTL,清除回调后是否仍然发生?
是的,除非状态描述符被用来创建存储在KeyedStateStore ProcessWindowFunction.Context#globalState
中的状态。此全局状态是清除窗口后保留的唯一状态。如果您有一个不断增长的密钥空间,您应该为您使用的任何globalState
配置状态TTL,否则将永远不会清理过时密钥的globalState
。
顺便说一句,这与rocksdb无关。对于任何状态后端,答案都是一样的。