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

flink的键值分区状态自动过期ttl配置

背景

flink的状态清理之前一直都是通过处理函数的ontimer设置定时器的方式清理掉那些无用的状态,但是这种方式容易出错而且代码也不优雅,使用flink提供的状态ttl的方式可以解决这个问题

flink键值分区状态ttl设置

文件系统/基于内存的状态后端的ttl设置

StateTtlConfig ttlConfig = StateTtlConfig.newBuilder(Time.days(7))// 状态过期的时间,这个状态会在最近一次状态被访问的时间(读和写都算被访问)或者只是最近一次更新/创建状态的时间之后N天后过期.setUpdateType(StateTtlConfig.UpdateType.OnCreateAndWrite)//OnCreateAndWrite表示在最后一次状态更新/创建后开始计时,过期即可删除,OnReadAndWrite表示在最后一次访问状态后开始计时,过期即可删除.setStateVisibility(StateTtlConfig.StateVisibility.NeverReturnExpired)//过期后但是状态被真正删除时返回的状态值,NeverReturnExpired表示状态一旦过期,即使后端状态系统没有删除这个状态,也是返回空值,ReturnExpiredIfNotCleanedUp表示虽然状态过期,但是如果状态后端还没有清理,那么就返回状态的值.cleanupFullSnapshot()//表示生成保存点或者检查点时会把过期状态剔除,这样从保存点或者检查点恢复时过期的状态就会被剔除,注意:仅仅设置这个标志,状态后端并不会把当前过期的状态清除,除非从检查点或者保存点中恢复.cleanupIncrementally(10, false)// 文件系统状态后端/内存状态后端独有的配置,表示第一个参数表示当有状态访问发生时检查的状态个数,发现有过期的就删除,第二个参数表示是否在处理记录的时候也会触发状态检查和清理逻辑,.build();

注意点:当没有状态访问或者是记录处理的时候是不会触发状态清理的,也就是如果比如凌晨你的系统根本没有任何记录处理或者状态访问操作,那么状态是不会被自动清理的,相当于状态清理的触发并不是定时任务的,而是需要触发源的

基于rockdb的状态后端的ttl设置

StateTtlConfig ttlConfig = StateTtlConfig.newBuilder(Time.days(7))// 状态过期的时间,这个状态会在最近一次状态被访问的时间(读和写都算被访问)或者只是最近一次更新/创建状态的时间之后N天后过期.setUpdateType(StateTtlConfig.UpdateType.OnCreateAndWrite)//OnCreateAndWrite表示在最后一次状态更新/创建后开始计时,过期即可删除,OnReadAndWrite表示在最后一次访问状态后开始计时,过期即可删除.setStateVisibility(StateTtlConfig.StateVisibility.NeverReturnExpired)//过期后但是状态被真正删除时返回的状态值,NeverReturnExpired表示状态一旦过期,即使后端状态系统没有删除这个状态,也是返回空值,ReturnExpiredIfNotCleanedUp表示虽然状态过期,但是如果状态后端还没有清理,那么就返回状态的值.cleanupFullSnapshot()//表示生成保存点或者检查点时会把过期状态剔除,这样从保存点或者检查点恢复时过期的状态就会被剔除,注意:仅仅设置这个标志,状态后端并不会把当前过期的状态清除,除非从检查点或者保存点中恢复.cleanupInRocksdbCompactFilter(1000)// rockdb状态后端在定时对状态进行压缩的时候,会顺带着清理过期状态,这个数值代表每访问多少个状态就获取当前时间检查一次状态的过期情况.build();

以上就是基于ttl的状态过期设置,另外我们也可以自己通过定时器的方式实现显式的状态删除

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

相关文章:

  • 解决Mac配置maven环境后,关闭终端后环境失效的问题(适用于所有终端关闭后环境失效的问题)
  • springboot运行jar包,实现复制jar包resources下文件、文件夹(可支持包含子文件夹)到指定的目录
  • Webpack Bundle Analyzer包分析器
  • SQL-----STUDENT
  • OpenCV入门——图像视频的加载与展示一些API
  • Control的Invoke和BeginInvoke
  • 什么是OpenCL?
  • AdaBoost:提升机器学习的力量
  • Pikachu(皮卡丘靶场)初识XSS(常见标签事件及payload总结)
  • 一则DNS被重定向导致无法获取MySQL连接处理
  • Vue3中如何使用this
  • 7.jvm对象内存布局
  • U-boot(一):Uboot命令和tftp
  • 代码随想录算法训练营第五十三天丨 动态规划part14
  • pdf增强插件 Enfocus PitStop Pro 2022 mac中文版功能介绍
  • uniapp app tabbar 页面默认隐藏
  • 深度学习 YOLO 实现车牌识别算法 计算机竞赛
  • 即时通讯技术文集(第23期):IM安全相关文章(Part12) [共15篇]
  • 为什么UI自动化难做?—— 关于Selenium UI自动化的思考
  • Python小白之“没有名称为xlwings‘的模块”
  • RK3588 学习教程1——获取linux sdk
  • 保护您的Google账号安全:检查和加固措施
  • 「Verilog学习笔记」优先编码器Ⅰ
  • java实现TCP通信(socket)服务端-客户端
  • 企业信息模糊搜索API的使用及应用场景
  • .net6+aspose.words导出word并转pdf
  • 深度学习 植物识别算法系统 计算机竞赛
  • 《深入浅出进阶篇》洛谷P4147 玉蟾宫——悬线法dp
  • 社区论坛小程序源码系统,功能齐全,页面简洁,前端+后端+完整部署教程
  • 大数据开发面试(一)