有状态的函数和算子在处理单个元素/事件时存储数据,使得状态state成为任何精细操作的关键构件。 例如: 当应用程序搜索某些特定模式事件时,状态将存储迄今为止遇到的事件序列。...当按每分钟/小时/天聚合事件时,状态保存待处理的聚合事件。 在数据流上训练机器学习模型时,状态保存当前版本的模型参数。 当需要管理历史数据时,状态允许访问过去发生的事件。...Flink 需要了解状态,以便使用检查点进行状态容错,并允许流应用程序使用保存点。 对状态进行了解有助于你对 Flink 应用程序进行扩展,这意味着 Flink 负责在并行实例之间进行重新分配状态。...State Backends可以在不更改应用程序逻辑的情况下进行配置。 下一步 使用状态:显示如何在Flink应用程序中使用状态,并解释不同类型的状态。 检查点:描述如何启用和配置容错检查点。...可查询状态:解释如何在Flink运行时从外部访问状态。 为Managed State自定义序列化:讨论为状态自定义序列化逻辑及其升级。
此外,新版本还简化了在容器管理基础设施(如 Kubernetes)上进行的部署,所有对 JobManager 的请求都通过 REST 发起,包括提交和取消作业、请求作业状态,获取保存点等。...2.2 广播状态 对广播状态的支持(即在某个函数的所有并行实例中复制状态)是一直广受开发者期待的特性。...当然,广播状态也可以有保存点或进行保存点恢复,就像 Flink 的其他状态一样,也具有一次性(exactly once)状态一致性保证。...其他特性和改进 OpenStack 提供了用于在资源池上创建公共和私有云的软件。Flink 现在支持 OpenStack 的类 S3 文件系统 Swift,用于保存检查点和保存点。...应用程序可以在无需手动触发保存点的情况下进行伸缩。实际上,Flink 仍然会保存一个保存点,然后停止应用程序并重新调整并行度。
它通过在运行时定期保存作业的状态,使得在作业失败时可以从最近的Checkpoint点恢复,从而避免数据丢失和重复处理。...作业中处理Checkpointing事件,如保存状态和恢复状态。...当Checkpointing被触发时,Flink会自动保存这些状态。当作业失败时,Flink会自动从最近的Checkpoint点恢复这些状态。...状态快照:当算子接收到Barrier时,会暂停处理新的数据记录,并将其当前状态保存为快照。状态快照可以保存到预设的持久化存储中,如HDFS、RocksDB等。...我们创建了一个简单的Flink作业,其中包含一个自定义数据源函数MySourceFunction、一个自定义状态管理函数MyStatefulMapFunction和一个自定义数据接收端函数MySinkFunction
欢迎您关注《大数据成神之路》 在我们开发Flink应用时,许多有状态流应用程序的一个常见要求是自动清理应用程序状态以有效管理状态大小,或控制应用程序状态的访问时间。...TTL(Time To Live)功能在Flink 1.6.0中开始启动,并在Apache Flink中启用了应用程序状态清理和高效的状态大小管理。...以下Java示例演示如何创建状态TTL配置并将其提供给状态描述符,该状态描述符将上述案例中的用户上次登录时间保存为Long值: import org.apache.flink.api.common.state.StateTtlConfig...完整快照自动删除过期状态 当获取检查点或保存点的完整快照时,Flink 1.6.0已经支持自动删除过期状态。大家注意,过期状态删除不适用于增量检查点。...只有当用户从快照重新加载其状态到本地时,才会清除用户的本地状态。 由于上述这些限制,FLink应用程序仍需要在Flink 1.6.0中过期后主动删除状态。
Flink的保存点是一项独特而强大的功能,可以解决更新有状态应用程序的问题以及许多其他相关挑战。保存点是应用程序状态的一致快照,因此与检查点非常相似。...但是,与检查点相比,保存点需要手动触发,并且在停止应用程序时不会自动将其删除。保存点可用于启动状态兼容的应用程序并初始化其状态。保存点启用以下功能: 应用程序演化:保存点可用于演化应用程序。...可以从先前版本的应用程序中获取的保存点重新启动应用程序的固定版本或改进版本。也可以从较早的时间点启动应用程序(如果存在这样的保存点),以修复有缺陷的版本产生的错误结果。...集群迁移:使用保存点,可以将应用程序迁移(或克隆)到不同的集群。 Flink版本更新:可以使用保存点迁移应用程序以在新的Flink版本上运行。...暂停和恢复:可以通过保存一个点并停止它来暂停应用程序。在以后的任何时间点,都可以从保存点恢复应用程序。 归档:可以将保存点归档,以便将应用程序的状态重置为较早的时间点。
Flink 线上用户有必要担心在作业升级(应用程序代码和Flink本身),出现故障以及应用程序和集群维护的过程中作业的表现情况。 2....保存点:版本化状态 在 Flink 中,我们引入了保存点功能,可以解决上述问题以及未来更多问题。保存点可以从正在运行的 Flink 作业上获取,实质上是在一个时间点上定义可以从外部访问的作业的快照。...最简单的例子是在修改应用程序代码的同时以一定时间间隔获取快照: ? 更重要的是,你可以从多个保存点分支出来,创建一个应用程序版本树: ?...举个例子,利用 t1 时间点的保存点,我们使用修改了的应用程序代码来恢复作业,创建 v1 作业。在时间 t3 和 t4,分别从版本 v0 和 v1 获取更多的保存点。...Flink 对保存点的支持通过允许你对应用程序代码和状态进行版本化来帮助解决这些操作问题。 目前的限制是应用程序的并发度必须与生成保存点的应用程序的并发度相匹配。
我们说”免费”,意思是只要你的程序是容错的,并且可以从错误中恢复,那你就可以在 Flink 中创建一个保存点并重新处理数据,花费的额外准备工作量几乎为零。 2....事实上,所有支持故障恢复的程序都是自动支持保存点的。因此,大多数进行有状态计算的程序已经满足了需要的条件。...所有的状态都通过 Flink 的管理状态接口保存:所有具体的算子的状态都必须保存在 Flink 的容错状态数据结构中,这让它可以按照某个之前的保存点位置被重置。...(1) 第一步:创建一个保存点 首先,获得所有运行中的 Flink 任务的列表: user$ flink list ------------Running/Restarting Jobs-------...你可以按你的需要去修改函数代码。不过,如果你用一个修改了的架构从保存点开始启动程序,那么为了能够恢复算子的状态,Flink 必须能够将保存点程序的算子与使用了新架构的新程序的算子对应起来。
这篇文章阐述了 Flink 应用程序达到生产状态所必须的配置步骤。在以下部分中,我们概述了在 Flink 作业达到生产状态之前技术领导、DevOps、工程师们需要仔细考虑的重要配置参数。...一个作业想要改变最大并发度,就只能从全新的状态重新开始。目前还无法在更改最大并发度后,从上一个成功的检查点或保存点恢复。...算子 UUID 可以使 Flink 有效地将算子的状态从保存点映射到恰当的算子上,这是保存点在 Flink 应用程序中正常工作的一个基本要素。 3....如果从保存点恢复状态,那么保存点必须采用相同的状态后端。 在我们之前的一篇博文中,详细说明了 Flink 目前支持的3种类型的状态后端之间的差异。...配置 Job Manager 的高可用性(HA) 高可用性(HA)配置确保了 Flink 应用程序 JobManager 组件在出现潜在故障时可以自动恢复,从而将停机时间降至最低。
Flink的端到端Exactly-Once语义应用程序 下面我们将介绍两阶段提交协议以及它如何在一个读取和写入 Kafka 的 Flink 应用程序示例中实现端到端的 Exactly-Once 语义。...但是,当一个进程具有外部状态(External state)时,状态处理会有所不同。外部状态通常以写入外部系统(如Kafka)的形式出现。...所有触发的状态快照都被视为该检查点的一部分。检查点是整个应用程序状态的快照,包括预先提交的外部状态。如果发生故障,我们可以回滚到上次成功完成快照的时间点。 下一步是通知所有算子检查点已成功完成。...我们只需实现四个函数就能为文件接收器提供 Exactly-Once 语义: beginTransaction:在开启事务之前,我们在目标文件系统的临时目录中创建一个临时文件。...在这种情况下,Flink 会将我们的算子恢复到已经预提交但尚未提交的状态。 我们必须在检查点状态下保存有关预提交事务的足够信息,以便能够在重新启动后正确中止或提交事务。
Flink用户还可以通过另一个特性有意识地管理状态版本,这个特性叫作保存点(savepoint) 保存点与检查点的工作方式完全相同,只不过它由用户通过Flink命令行工具或者Web控制台手动触发,而不由...Flink自动触发。...和检查点一样,保存点也被保存在稳定存储中 对保存点的另一种理解是,它在明确的时间点保存应用程序状态的版本 图5-9:手动触发的保存点(以圆圈表示)在不同时间捕获正在运行的Flink应用程序的状态 图5...-10:使用保存点更新Flink应用程序的版本。...新版本可以从旧版本生成的一个保存点处开始执行 保存点可用于应对流处理作业在生产环境中遇到的许多挑战 应用程序代码升级 Flink版本更新 维护和迁移 假设模拟与恢复 A/B测试 图5-11:在该应用程序架构中
一次checkpoint是以下内容的一致性快照: 应用程序的当前状态 输入流的位置 Flink可配置一个固定时间点,定期产生checkpoint,将checkpoint的数据写入持久存储系统,如S3或HDFS...如果发生机器或软件故障,重新启动后,Flink应用程序将从最新的checkpoint点恢复处理; Flink会恢复应用程序状态,将输入流回滚到上次checkpoint保存的位置,然后重新开始运行。...内部状态 指Flink state backend保存和管理的。如第二个operator中window聚合算出来的sum值。...用户只需要实现四个函数,就能为数据输出端实现Exactly-Once语义: beginTransaction – 在事务开始前,我们在目标文件系统的临时目录中创建一个临时文件。...在这种情况下,Flink会将operator的状态恢复到已经预提交,但尚未真正提交的状态。 我们需要在预提交阶段保存足够多的信息到checkpoint状态中,以便在重启后能正确的中止或提交事务。
状态变化 在许多情况下,由于需求的变化,长期运行的 Flink 应用程序会在其生命周期内发生变化。在不丢失当前应用程序进度状态的情况下更改用户状态是应用程序变化的关键要求。...Flink 1.7.0 版本中社区添加了状态变化,允许我们灵活地调整长时间运行的应用程序的用户状态模式,同时保持与先前保存点的兼容。通过状态变化,我们可以在状态模式中添加或删除列。...另外,在编写保存点/检查点时,现在也将清理状态。Flink 1.8引入了对RocksDB状态后端(FLINK-10471)和堆状态后端(FLINK-10473)的旧条数的连续清理。...恢复保存点时对模式迁移的新支持 使用Flink 1.7.0,我们在使用AvroSerializer时添加了对更改状态模式的支持。...保存点兼容性 TraversableSerializer 此序列化程序(FLINK-11539)中的更新,包含Scala的Flink 1.2中的保存点将不再与Flink 1.8兼容。
用户可以选择维护状态的不同状态原语(原子值,列表,映射)和状态后端(堆内存,RocksDB)。处理函数中的应用程序逻辑可以访问和修改状态。...在文章的其余部分中,我们会介绍一个有状态应用程序示例,该应用程序提取用户登录事件,保存每个用户的最后一次登陆时间,以改善高频访问用户的的体验。 2....以下 Java 示例展示了如何创建状态 TTL 配置并将其提供给状态描述符,该描述符将用户的上次登录时间作为 Long 值保存: import org.apache.flink.api.common.state.StateTtlConfig...Flink 1.6.0 仅在检查点或保存点生成完整快照时才支持自动驱逐过期状态。请注意,状态驱逐不适用于增量检查点。...只有当算子从快照重新加载其状态时,即在恢复或从保存点启动时,算子的本地状态才会被清除。由于这些限制,应用程序在 Flink 1.6.0 过期后仍然需要主动删除状态。
保存点包含两个主要元素: 首先,Savepoint 包括一个包含(通常是很大的)二进制文件的目录,该二进制文件表示在 Savepoint和Checkpoint 生成镜像时流应用程序的整个状态 一个(相对较小的...)元数据文件,包含指向所有文件的指针(路径),这些文件是保存点的一部分,并存储在所选的分布式文件系统或数据存储中。...阅读这篇文章之前,你可以阅读一下Flink 保存点之回溯时间。 上面所有关于 Savepoints 的内容听起来与我们在之前的文章中对 Checkpoints 的介绍非常相似。...如果程序发生故障,Flink 会通过从 Checkpoint 加载应用程序状态并从恢复的读取偏移量继续读取来恢复应用程序,就像什么也没发生一样。...2.3 生命周期 Checkpoint 是自动和定期的。它们由 Flink 自动,定期地创建和删除,不需与用户进行交互,以确保在作业意外失败的情况下可以恢复。
本文重点介绍开发人员在有状态流处理应用中使用 Flink 的 Keyed State 的函数或算子评估性能时应牢记的3个重要因素。...Keyed State 是 Flink 中两种状态中的其中一种,另一种是 Operator State。...选择状态后端 对 Flink 应用程序有状态函数或算子性能影响最大的是我们所选择的状态后端。最明显的因素是每个状态后端以不同的方式处理状态序列化以持久化保存。...仅在创建状态快照以创建 Flink 检查点或保存点时才会发生序列化开销。使用这些状态后端的缺点是状态大小受 JVM 堆大小的限制,并且可能会遇到 OutOfMemory 错误或垃圾回收的长暂停。...英译对照 算子: operator 状态后端: state backend 检查点: checkpoints 保存点: savepoints 状态原语: state primitives 原文: 3 important
它与常规列表状态的区别在于,在发生故障时,或者 从保存点(savepoint)启动应用程序时如何恢复。一种是均匀分配,另外一种是将所有 State 合并为全量 State 再分发给每个实例。...18、什么是Savepoin保存点?...保存点在 Flink 中叫作 Savepoint,是基于 Flink 检查点机制的应用完整快照备份机制, 用来保存状态 可以在另一个集群或者另一个时间点,从保存的状态中将作业恢复回来。...从保存点恢复作业并不简单,尤其是在作业变更(如修改逻辑、修复 bug) 的情况下, 需要考虑如下几点: (1)算子的顺序改变 如果对应的 UID 没变,则可以恢复,如果对应的 UID 变了恢复失败。...(4)添加和删除无状态的算子 如果手动设置了 UID 则可以恢复,保存点中不记录无状态的算子 如果是自动分配的 UID ,那么有状态算子的可能会变( Flink 一个单调递增的计数器生成 UID,DAG
介绍了状态、检查点、保存点原理 Flink DataStream—— 状态(State)&检查点(Checkpoint)&保存点(Savepoint)原理 [TOC] 1...背景 最近一次项目当中需要将大量数据保存再Flink程序当中用作缓存数据一共后续数据使用,隧对最近使用到的状态、检查点、保存点等原理和使用进行一个总结 2....Raw State 状态管理方式 Flink Runtime托管,自动存储、自动恢复、自动伸缩 用户自己管理 状态数据结构 Flink提供的常用数据结构,如ListState、MapState等 字节数组...绝大多数工作是由Flink来处理的,比如Flink会定期执行快照,发生故障后,Flink自动从最近一次Checkpoint数据中恢复。...参考 状态、检查点和保存点 Flink 状态分类
Flink State状态Flink是一个有状态的流式计算引擎,所以会将中间计算结果(状态)进行保存,默认保存到TaskManager的堆内存中,但是当task挂掉,那么这个task所对应的状态都会被清空...在一个流应用程序运行时,Flink 会定期保存检查点,在检查点中会记录每个算子的 id 和状态;如果发生故障,Flink 就会用最近一次成功保存的检查点来恢复应用的状态,重新启动处理流程,就如同“读档”...除了检查点之外,Flink 还提供了“保存点”(savepoint)的功能。保存点在原理和形式上跟检查点完全一样,也是状态持久化保存的一个快照;保存点与检查点最大的区别,就是触发的时机。...检查点是由 Flink 自动管理的,定期创建,发生故障之后自动读取进行恢复,这是一个“自动存盘”的功能;而保存点不会自动创建,必须由用户明确地手动触发保存操作,所以就是“手动存盘”。...要使用Savepoints,需要按照以下步骤进行:配置状态后端: 在Flink中,状态可以保存在不同的后端存储中,例如内存、文件系统或分布式存储系统(如HDFS)。
Flink DataStream 应用程序所处理的事件以数据对象的形式存在。函数调用时会传入数据对象,同时也可以输出数据对象。因此,Flink 在内部需要能够处理这些对象。...当通过网络传输或者读写状态后端、检查点以及保存点时,需要对它们进行序列化和反序列化。为了能够更高效的做到这一点,Flink 需要详细了解应用程序处理的数据类型。...此外,Flink 还有一个类型提取系统,可以分析函数的输入和返回类型来自动获取类型信息,进而获得序列化器和反序列化器。...在本文中,我们会讨论 Flink 支持的数据类型,如何为数据类型创建类型信息,以及如何在 Flink 的类型系统无法自动推断函数的返回类型时提供提示,最后简单说明一下显示指定类型信息的两个场景。...当应用程序提交执行时,Flink 的类型系统会尝试为处理的每种数据类型自动推断 TypeInformation。
抽象层次 Flink提供不同级别的抽象层次来开发流处理和批处理应用程序。 ? (1) 最低级别的抽象只是提供有状态的数据流。通过Process Function集成到DataStream API中。...(2) 在实际中,大多数应用程序不需要上述描述的低级抽象,而是使用如DataStream API(有界/无界流)和DataSet API(有界数据集)的核心API进行编程。...备注: Flink的DataSet API中使用的数据集也是内部的流 - 稍后会介绍这一点。...时间 当提到流程序(例如定义窗口)中的时间时,你可以参考不同的时间概念: (1) 事件时间是事件创建的时间。它通常由事件中的时间戳描述,例如附接在生产传感器,或者生产服务。...有状态操作的状态保存在一个可被视为嵌入式键值对存储中。状态与由有状态算子读取的流一起被严格地分区与分布(distributed)。
领取专属 10元无门槛券
手把手带您无忧上云