php自动发卡程序8.0_Flink状态生存时间特性:如何自动清理应用程序状态?

在本文中,我们将讨论引入状态生存时间特性的动机并讨论其相关用例。此外,我们还将演示如何使用和配置该特性。
ccb4ac507d94b959caffd13e0efe2754.png

对于许多状态流式计算程序来说,一个常见的需求是自动清理应用程序的状态(state),以便有效地控制状态大小,或者控制程序访问状态的有效时间(例如受限于诸如 GDPR 等法律条规)。Apache Flink 自 1.6.0 版本引入了状态的生存时间(time-to-live,TTL)功能,使得应用程序的状态清理和有效的状态大小管理成为可能。

在本文中,我们将讨论引入状态生存时间特性的动机并讨论其相关用例。此外,我们还将演示如何使用和配置该特性。同时,我们将会解释 Flink 如何借用状态生存时间特性在内部管理状态,并对 Flink 1.8.0 中该功能引入的相关新特性进行一些展示。本文章最后对未来的改进和扩展作了展望。


状态的暂时性

有两个主要原因可以解释为什么状态只应该维持有限的时间。先设想一个 Flink 应用程序,它接收用户登录事件流,并为每个用户存储上一次登录时的相关事件信息和时间戳,以改善高频访问用户的体验。

控制状态的大小。 状态生存时间特性的主要使用场景,就是能够有效地管理不断增长的状态大小。通常情况下,数据只需要暂时保存,例如用户处在一次网络连接会话中。当用户访问事件结束时,我们实际上就没有必要保存该用户的状态,来减少无谓的状态存储空间占用。Flink 1.8.0 引入的基于生存时间的后台状态清理机制,使得我们能够自动地对无用数据进行清理。此前,应用程序开发人员必须采取额外的操作并显式地删除无用状态以释放存储空间。这种手动清理过程不仅容易出错,而且效率低下。以上述用户登录案例为例,因为这些不活跃用户的相关信息会被自动过期清理掉,我们就不再需要额外存储上次登录的时间戳。

符合 (敏感) 数据保护的要求。 随着数据隐私法规的发展(例如欧盟颁布的通用数据保护法规 GDPR),遵守此类法规的相关要求,或将数据进行敏感处理已经成为许多应用程序的首要任务。此类使用场景的典型案例包括需要仅在特定时间段内保存数据并防止其后可以再次访问该数据。这对于为客户提供短期服务的公司来说是一个常见的挑战。状态生存时间这一特性,就保证了应用程序仅在有限时间内可以进行访问,有助于遵守数据保护法规。

这两个需求都可以通过状态生存时间来解决,这个功能在键值变得不重要并且不再需要保存在存储中时,就可以周期性地、持续地删除状态中的键值。

40d91ce07f0f9cc356c61997b3cad91a.png

对应用状态的持续清理

Apache Flink 的 1.6.0 版本引入了状态生存时间特性。它使流处理应用程序的开发人员能够配置算子的状态,使其在定义的生存时间超时后被清除。在 Flink 1.8.0 中,该功能得到了进一步扩展,对 RocksDB 和堆内存状态后端(FsStateBackend和MemoryStateBackend)的旧数据进行连续性的清理。

在 Flink 的DataStream API 中,应用程序状态是由状态描述符(state descriptor)来定义的。状态生存时间是通过将StateTtlConfiguration对象传递给状态描述符来配置的。下面的 Java 示例演示了如何创建状态生存时间的配置,并将其提供给状态描述符,该状态描述符将用户的上次登录时间保存为Long值:

import org.apache.flink.api.common.state.StateTtlConfig;

import org.apache.flink.api.common.time.Time;

import org.apache.flink.api.common.state.ValueStateDescriptor;

StateTtlConfig ttlConfig = StateTtlConfig

.newBuilder(Time.days(7))

.setUpdateType(StateTtlConfig.UpdateType.OnCreateAndWrite)

.setStateVisibility(StateTtlConfig.StateVisibility.NeverReturnExpired)

.build();

ValueStateDescriptor lastUserLogin =

new ValueStateDescriptor<>("lastUserLogin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值