【flink】状态清理策略(TTL)

flink的keyed state是有有效期(TTL)的,使用和说明在官网描述的篇幅也比较多,对于三种清理策略没有进行横向对比得很清晰。

  • 全量快照清理(FULL_STATE_SCAN_SNAPSHOT)
  • 增量清理(INCREMENTAL_CLEANUP)
  • rocksdb压缩清理(ROCKSDB_COMPACTION_FILTER)

注意,三种状态清理策略不是互斥的,并不是三选一的问题 ,一般是全量快照清理配合另两个其中的一个来使用(需要根据不同的state backend),可以看到StateTtlConfig.CleanupStrategies.strategies是一个集合来的。

全量快照清理

只发生在全量checkpoint的时候,把过期的元素过滤掉,以减少远程端checkpoint storage的大小(如hdfs),无论状态后端是hashmap还是rocksdb都支持,官网用了另一种相同意思描述:在 RocksDBStateBackend 的增量 checkpoint 模式下无效(当前hashmap不支持增量checkpoint)

  • 开启方式

    复制代码
      StateTtlConfig ttlConfig = StateTtlConfig .newBuilder(Time.seconds(1))
          .cleanupFullSnapshot()   //只要有这行即可
          .build();

    // 只有开启了全量快照清理才会触发transform(过滤)
    private StateSnapshotTransformFactory<?> getSnapshotTransformFactory() {
    if (!ttlConfig.getCleanupStrategies().inFullSnapshot()) {
    return StateSnapshotTransformFactory.noTransform();
    } else {
    return new TtlStateSnapshotTransformer.Factory<>(timeProvider, ttl);
    }
    }

当进行全量快照是会遍历状态中每个元素(TtlValue),过滤掉那些已经过期的TtlStateSnapshotTransformer.expired()

增量清理

在状态访问、增加、修改、删除时都会触发,主要是为了减少状态后端中的大小,当前仅状态后端为hashmap才支持增量清理

这里的增量 有点难理解,实际它的含义是:对于一个keyed stated,状态是按key被分区成若干部分的,每次只取cleanupSize个key的状态(StateEntry)进行清理 ,对于大状态这是必须的,因为这会增加状态算子处理数据的时间。对于rocksdb,由于提供不了全局的StateEntry访问器,所以它不支持增量清理AbstractRocksDBState.getStateIncrementalVisitor

判断是否满足增量清理:TtlStateFactory.registerTtlIncrementalCleanupCallback

清理逻辑:TtlIncrementalCleanup.runCleanup

启用方式:这玩意在hashmap状态后端中是默认开启的!!!

复制代码
        public IncrementalCleanupStrategy getIncrementalCleanupStrategy() {
            IncrementalCleanupStrategy defaultStrategy =
                    isCleanupInBackground ? DEFAULT_INCREMENTAL_CLEANUP_STRATEGY : null;
            return (IncrementalCleanupStrategy)
                    strategies.getOrDefault(Strategies.INCREMENTAL_CLEANUP, defaultStrategy);
        }

只要isCleanupInBackground=true,就算没显式调用cleanupIncrementally(),它依然会给你生成一个默认的增量清理策略。所以在上述全量快照清理的启用示例中同时也开启了增量清理。如果需要禁止,需要显式调disableCleanupInBackground()

rocksdb压缩清理

flink 提供的 rocksdb 压缩过滤器(FlinkCompactionFilter)会在压缩时过滤掉已经过期的状态数据,最终调用到C++的nactive方法,减少sst文件的大小。应该与增量/全量checkpoint方式无关。

相关推荐
物联网软硬件开发-轨物科技1 小时前
【轨物洞见】什么是产品碳足迹(PCF)?ISO 14067 计算方法与应用场景深度解读
大数据·网络·人工智能
GlobalInfo1 小时前
2026年全球无人机清洗系统市场深度分析:规模、竞争格局与AI自主作业演进趋势
大数据·人工智能·ai·无人机
AI职业加油站1 小时前
AI 校招现状:大模型应用工程师证书,助力简历能力证明
大数据·运维·人工智能·学习·职场发展
cc5725026532 小时前
2027 秋招求职分析:大数据相关专业,企业服务售前与实施岗位对比
大数据
专注API从业者2 小时前
告别复杂页面解析,OpenClaw 快速搭建电商商品监控与数据分析脚本
大数据·数据库·python·数据挖掘·数据分析
楚楚2512 小时前
2026企业AI办公工具选型指南:从需求匹配到平台评估
大数据·人工智能
SelectDB2 小时前
Apache Doris x Fluss:面向湖流一体的统一查询与分析
大数据·数据库·数据分析
论文复现现场3 小时前
金融大模型微调需要几张 RTX 4090?QLoRA 配置、工期估算与断点续训
大数据·金融·大模型·分布式训练·模型微调·qlora·rtx4090
阿乔外贸日记3 小时前
全球电子产业高度集中:中、韩、日和中国台湾地区占全球数字硬件产能八成
大数据·服务器·人工智能·物联网·云计算
飞飞传输3 小时前
业务系统文件安全检测怎么做?生物医药企业选型与建设指南
大数据·运维·安全