当前位置: 首页 > news >正文

【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方式无关。

http://www.lryc.cn/news/265417.html

相关文章:

  • 4. 行为模式 - 中介者模式
  • 2015年第四届数学建模国际赛小美赛A题飞机上的细长座椅解题全过程文档及程序
  • 机器学习笔记(二)使用paddlepaddle,再探波士顿房价预测
  • 【Linux】权限篇(二)
  • reduce累加器的应用
  • 助力硬件测试工程师之EMC项目测试。
  • Github 2023-12-23 开源项目日报 Top10
  • Quartz.net 正则表达式触发器
  • 【已解决】修改了网站的class样式name值,会影响SEO,搜索引擎抓取网站及排名吗?
  • 微信小程序开发系列-02注册小程序
  • 安装 PyCharm 2021.1 保姆级教程
  • 浏览器 cookie 的原理(详)
  • StringBuilder和StringBuffer区别是什么?
  • 【数据分析】数据指标的分类及应用场景
  • 首涂第二十八套_新版海螺M3多功能苹果CMSv10自适应全屏高端模板
  • MatGPT - 访问 OpenAI™ ChatGPT API 的 MATLAB® 应用程序
  • Tomcat转SpringBoot、tomcat升级到springboot、springmvc改造springboot
  • 浅述无人机技术在地质灾害应急救援场景中的应用
  • js-cookie的使用以及存储token安全的注意要点
  • Android 网络状态判断
  • 管理类联考——数学——真题篇——按知识分类——代数——数列
  • .net core webapi 自定义异常过滤器
  • SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API加载
  • python调用GPT API
  • ModuleNotFoundError: No module named ‘tensorflow‘
  • 智能优化算法应用:基于鹰栖息算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • 自定义Taro上传图片hooks(useUploadImg)
  • 量子密码学简介
  • 使用docker创建自己的Android编译容器
  • 4-Docker命令之docker load