ProcessWindowFunction 的 window 状态的清除配置,没有 TTL,以 RocksDB 作为后端

Cleanup configuration for ProcessWindowFunction's window state without TTL with RocksDB as backend

Flink 为托管状态提供 TTL 配置,并且, 当使用 RocksDB 作为后端时, 它在自定义压缩过滤器中执行清理 (如果我理解正确的话)。 但是,在 ProcessWindowFunction 中的键控窗口状态的情况下, 期望我们覆盖 clear 方法并显式调用类似

的方法
context.windowState().*.clear()

如果状态描述符配置TTL, clear 回调后是否仍会进行清理? 如果不是,这种状态的清理完全取决于 RocksDB 级别的大小, 默认设置是什么,是否可配置?

If the state descriptor does not configure TTL, does cleanup still occur after the clear callback?

是的,除非状态描述符用于创建存储在 KeyedStateStore ProcessWindowFunction.Context#globalState 中的状态。此全局状态是 windows 被清除后唯一保留的状态。如果您有 ever-growing 密钥 space,您应该为您使用的任何 globalState 配置状态 TTL,否则永远不会清除陈旧密钥的 globalState

FWIW,没有什么 RocksDB-specific 关于这个。对于任何状态后端,答案都是相同的。