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 关于这个。对于任何状态后端,答案都是相同的。
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 关于这个。对于任何状态后端,答案都是相同的。