Flink任务宕机超2分钟,StateTtlConfig配置的状态是否保留?
问题解答
当任务宕机时长超过2分钟,之前的状态条目会保留在RocksDB中,原因如下:
Flink的State TTL机制并非定时主动扫描删除所有过期状态,而是依赖两类触发清理的时机:
- 状态被访问时:任务读取或写入某个状态条目时,会检查其是否过期,若过期则执行删除操作
- 后台异步清理线程:任务运行时,后台线程会周期性清理状态,但任务宕机后该线程会停止工作
任务宕机期间,既没有状态访问操作,也没有后台清理线程运行,因此即使状态条目已过TTL,也不会被物理删除,依然保存在RocksDB的持久化存储中。
结合你的配置细节:
StateVisibility.NeverReturnExpired仅控制访问时不返回过期状态,但不会主动删除物理存储中的过期条目UpdateType.OnCreateAndWrite仅在创建或写入状态时更新TTL时间,宕机期间无此类操作,TTL不会续期,但状态本身不会被自动删除
只有当任务恢复启动后,后续的状态访问操作或后台清理线程才会检查并删除这些过期的状态条目。
内容的提问来源于stack exchange,提问作者Deep Singh
相关产品推荐
相关产品推荐

