介绍了状态、检查点、保存点原理 Flink DataStream—— 状态(State)&检查点(Checkpoint)&保存点(Savepoint)原理 [TOC] 1...背景 最近一次项目当中需要将大量数据保存再Flink程序当中用作缓存数据一共后续数据使用,隧对最近使用到的状态、检查点、保存点等原理和使用进行一个总结 2....假如我们使用一个持久化的备份系统,不断将内存中的状态备份起来,当流处理作业出现故障时,需要考虑如何从备份中恢复。而且,大数据应用一般是横向分布在多个节点上,流处理框架需要保证横向的伸缩扩展性。...Flink定期保存状态数据到存储上,故障发生后从之前的备份中恢复,这个过程被称为Checkpoint机制。 3.1 Checkpoint大致流程 暂停处理新流入数据,将新数据缓存起来。...参考 状态、检查点和保存点 Flink 状态分类
Flink的核心功能 架构 任务执行过程的两个主要组件是作业管理器和任务管理器。主节点上的作业管理器启动工作节点。在工作节点上,任务管理器负责运行。任务管理器还可以同时运行多个任务。...DataStream API提供了Flink流应用程序的核心构建块:数据流及其上的转换。在Flink程序中,来自源的传入数据流通过定义的操作进行转换,从而导致到接收器的一个或多个输出流。 ?...您还可以创建检查点和保存点,以在持久性存储上对流式应用程序进行容错备份。 ? 事件时间和水印 在时间敏感的情况下,应用程序使用警报或触发功能,区分事件时间和处理时间很重要。...检查点和保存点 可以创建检查点和保存点,以使Flink应用程序在整个管道中容错。Flink包含一个容错机制,该机制可以连续创建数据流的快照。快照不仅包括数据流,还包括附加的状态。...如果发生故障,则选择最新快照,然后系统从该检查点恢复。这保证了可以始终保持计算结果的一致性。当检查点由Flink创建和管理时,保存点由用户控制。保存点可以描述为已执行过程的备份。 ?
的用途 Flink解决了可能影响正确性的几个问题,包括如何在故障发生之后仍能进行有状态的计算 Flink所用的技术叫作检查点(checkpoint) 在每个检查点,系统都会记录中间计算状态,从而在故障发生时准确地重置...备份反映的是检查点的状态 Flink检查点算法的正式名称是异步屏障快照(asynchronousbarriersnapshotting)。...Flink用户还可以通过另一个特性有意识地管理状态版本,这个特性叫作保存点(savepoint) 保存点与检查点的工作方式完全相同,只不过它由用户通过Flink命令行工具或者Web控制台手动触发,而不由...和检查点一样,保存点也被保存在稳定存储中 对保存点的另一种理解是,它在明确的时间点保存应用程序状态的版本 图5-9:手动触发的保存点(以圆圈表示)在不同时间捕获正在运行的Flink应用程序的状态 图5...-10:使用保存点更新Flink应用程序的版本。
主要功能是调度任务,协调检查点,协调故障恢复等。 至少有一个JobManager。高可用配置下将有多个JobManagers,其中一个始终是领导者,其他都是备份。...除了定义保存状态的数据结构之外,后端状态还实现了获取键/值状态的时间点快照逻辑并将该快照存储为检查点的一部分。 ? 5. 保存点 用Data Stream API编写的程序可以从保存点恢复执行。...保存点允许更新你的程序和你的Flink集群,而不会丢失任何状态。 保存点是手动触发的检查点,它会捕获程序的快照并将其写入后端状态。他们依赖于常规检查点机制。...在执行期间的程序定期在工作节点上生成快照并生成检查点。为了恢复,只需要最后完成的检查点,一旦新的检查点完成,可以安全地丢弃较旧的检查点。...保存点与这些定期检查点类似,只不过它们是由用户触发的,不会在新检查点完成时自动失效。
保存点:版本化状态 在 Flink 中,我们引入了保存点功能,可以解决上述问题以及未来更多问题。保存点可以从正在运行的 Flink 作业上获取,实质上是在一个时间点上定义可以从外部访问的作业的快照。...在内部,保存点只是 Flink 普通的定期检查点,以保证在发生故障时的正确性。主要区别是: 保存点可以手动触发。 保存点永不过期,除非用户手动进行处理。...要从保存点恢复作业,只需运行如下即可: flink run -s pathToSavePoint jobJar 使用保存点,不必从头开始重新读取事件流以重新填充 Flink 作业的状态,因为你可以随时获取一致性快照并从该检查点恢复...更重要的是,你可以从多个保存点分支出来,创建一个应用程序版本树: ? 这里,时间 t1 和 t2 分别在正在运行的作业 v0 上生成两个保存点,创建版本 v0t1 和 v0t2。...Flink 对保存点的支持通过允许你对应用程序代码和状态进行版本化来帮助解决这些操作问题。 目前的限制是应用程序的并发度必须与生成保存点的应用程序的并发度相匹配。
其中包含了一个用于传递来自乘客和司机 App 事件数据的发布/订阅消息总线、为流式分析平台(如 Apache Samza、Apache Flink)提供支持、将数据库变更日志流到下游订阅者,并将各种数据接收到...我们制定了详细的灾难恢复计划,尽量减少自然和人为灾难(如停电、灾难性软件故障和网络中断)对业务的影响。我们采用多区域部署策略,将服务与备份一起部署在分布式的数据中心中。...主区域的更新服务将定价结果保存到双活数据库中,以便进行快速查询。 图 3:双活消费模式架构 当主区域发生灾难时,双活服务会将另一个区域作为主区域,峰时价格计算会转移到另一个区域。...同样,其余行记录了其他复制路线的检查点。 偏移量管理服务将这些检查点保存在双活数据库中,并用它们来计算给定的主备消费者的偏移量映射。同时,一个偏移量同步作业负责定期同步两个区域之间的偏移量。...但是,我们还有更具挑战性的工作要做,目前要解决如何在不进行区域故障转移的情况下容忍单个集群故障的细粒度恢复策略。
当按每分钟/小时/天聚合事件时,状态保存待处理的聚合事件。 在数据流上训练机器学习模型时,状态保存当前版本的模型参数。 当需要管理历史数据时,状态允许访问过去发生的事件。...Flink 需要了解状态,以便使用检查点进行状态容错,并允许流应用程序使用保存点。 对状态进行了解有助于你对 Flink 应用程序进行扩展,这意味着 Flink 负责在并行实例之间进行重新分配状态。...根据你的 State Backends,Flink也可以管理应用程序的状态,这意味着Flink进行内存管理(可能会溢写到磁盘,如果有必要),以允许应用程序保持非常大的状态。...State Backends可以在不更改应用程序逻辑的情况下进行配置。 下一步 使用状态:显示如何在Flink应用程序中使用状态,并解释不同类型的状态。 检查点:描述如何启用和配置容错检查点。...可查询状态:解释如何在Flink运行时从外部访问状态。 为Managed State自定义序列化:讨论为状态自定义序列化逻辑及其升级。
(2) 在实际中,大多数应用程序不需要上述描述的低级抽象,而是使用如DataStream API(有界/无界流)和DataSet API(有界数据集)的核心API进行编程。...Table API程序声明性地定义了如何在逻辑上实现操作,而不是明确指定操作实现的具体代码。...备注: Flink的DataSet API中使用的数据集也是内部的流 - 稍后会介绍这一点。...从概念上讲,流是数据记录(可能是永无止境的)流,而转换是将一个或多个流作为输入,并产生一个或多个输出流。...然而,有时候,一个转换可能由多个转换算子组成。 3. 并行数据流图 Flink中的程序本质上是分布式并发执行的。在执行过程中,一个流有一个或多个流分区,每个算子有一个或多个算子子任务。
相比较而言,在一个算子上,可能会有很多个 Key,从而对应多个 KeyState。 Operator 目前支持: 列表状态(List state):将状态表示为一组数据的列表。...它与常规列表状态的区别在于,在发生故障时,或者从保存点(savepoint)启动应用程序时如何恢复。...执行检查点的时候,会把 State 的快照数据保存到 JobManager 进程的内存中。MemoryStateBackend 可以使用异步的方式进行快照,也可以使用同步的方式。...3)RocksDBStateBackend 是目前唯一支持增量检查点的后端。增量检查点非常适用于超大状态的场景。 注意点: 1)总 State 大小仅限于磁盘大小,不受内存限制。...在执行检查点时,会将新的 sstable 持久化到存储中(如 HDFS 等),同时保留引用。
下图说明了这如何影响检查点。 image.png 注意:可以(通过 CheckpointConfig)配置应用程序以允许同时进行多个检查点。...对于 Flink 中状态较大的应用程序,这通常会将过多的资源绑定到检查点中。 当手动触发保存点时,它可能与正在进行的检查点同时进行。...最大并行度定义了在重新缩放程序时(通过保存点)可以设置程序并行度的高度。 Flink 的内部簿记以 max-parallelism-many 键组的粒度跟踪并行状态。...Flink 的设计力求使最大并行度具有非常高的值变得高效,即使以低并行度执行程序也是如此。 压缩 Flink 为所有检查点和保存点提供可选的压缩(默认:关闭)。...方法 任务本地状态恢复正是针对这个恢复时间长的问题,其主要思想是:对于每个检查点,每个任务不仅将任务状态写入分布式存储,而且在一个备份中保存一份状态快照的副本。
新特性和改进 2.1 重写 Flink 部署和处理模型 重写 Flink 部署和处理模型的工作已经进行了一年多,来自多个组织的贡献者(如 Artisans、阿里巴巴和 Dell EMC)合作设计和实现了该特性...此外,新版本还简化了在容器管理基础设施(如 Kubernetes)上进行的部署,所有对 JobManager 的请求都通过 REST 发起,包括提交和取消作业、请求作业状态,获取保存点等。...当然,广播状态也可以有保存点或进行保存点恢复,就像 Flink 的其他状态一样,也具有一次性(exactly once)状态一致性保证。...Flink 现在支持 OpenStack 的类 S3 文件系统 Swift,用于保存检查点和保存点。Swift 可以在没有 Hadoop 依赖的情况下使用。...应用程序可以在无需手动触发保存点的情况下进行伸缩。实际上,Flink 仍然会保存一个保存点,然后停止应用程序并重新调整并行度。
当发生故障时,Flink使用最新的检查点进行重启。一些Flink的用户在程序“状态”中保存了GB甚至TB的数据。...在引入“增量式的检查点”之前,每一个Flink的检查点都保存了程序完整的状态。...后来我们意识到在大部分情况下这是不必要的,因为上一次和这次的检查点之前 ,状态发生了很大的变化,所以我们创建了“增量式的检查点”。增量式的检查点仅保存过去和现在状态的差异部分。...因为增量式的检查点不需要每次把完整的状态发送到存储中。 现在只能通过RocksDB state back-end来获取增量式检查点的功能,Flink使用RocksDB内置的备份机制来合并检查点数据。...Flink处理这种情况,仅带来一点点开销。这个过程很重要,因为在任务需要重启的时候,Flink只需要保留较少的历史文件。 ?
这篇文章改编自2017年柏林Flink Forward上Piotr Nowojski的演讲。你可以在Flink Forward Berlin网站上找到幻灯片和演示文稿。...Flink文档提供了这个功能的全面概述。 在继续之前,我们先对检查点机制进行简要概述,这对我们理解检查点是有必要的。...如果发生故障,我们可以回滚到上次成功完成快照的时间点。 下一步是通知所有算子检查点已成功完成。这是两阶段提交协议的提交阶段,JobManager 为应用程序中的每个算子发出检查点完成的回调。...下面我们讨论一下如何在一个简单的基于文件的示例上实现 TwoPhaseCommitSinkFunction。...在这种情况下,Flink 会将我们的算子恢复到已经预提交但尚未提交的状态。 我们必须在检查点状态下保存有关预提交事务的足够信息,以便能够在重新启动后正确中止或提交事务。
其中包含了一个用于传递来自乘客和司机 App 事件数据的发布 / 订阅消息总线、为流式分析平台(如 Apache Samza、Apache Flink)提供支持、将数据库变更日志流到下游订阅者,并将各种数据接收到...我们制定了详细的灾难恢复计划,尽量减少自然和人为灾难 (如停电、灾难性软件故障和网络中断) 对业务的影响。我们采用多区域部署策略,将服务与备份一起部署在分布式的数据中心中。...主区域的更新服务将定价结果保存到双活数据库中,以便进行快速查询。 图 3:双活消费模式架构 新年新气象,该换一波壁纸了!...同样,其余行记录了其他复制路线的检查点。 偏移量管理服务将这些检查点保存在双活数据库中,并用它们来计算给定的主备消费者的偏移量映射。同时,一个偏移量同步作业负责定期同步两个区域之间的偏移量。...但是,我们还有更具挑战性的工作要做,目前要解决如何在不进行区域故障转移的情况下容忍单个集群故障的细粒度恢复策略。
5、Flink 对于一些聚合类的窗口计算(如sum,min)做了优化,因为聚合类的计算不需要将窗口中的所有数据都保存下来,只需要保存一个result值就可以了。...18、什么是Savepoin保存点?...保存点在 Flink 中叫作 Savepoint,是基于 Flink 检查点机制的应用完整快照备份机制, 用来保存状态 可以在另一个集群或者另一个时间点,从保存的状态中将作业恢复回来。...从保存点恢复作业并不简单,尤其是在作业变更(如修改逻辑、修复 bug) 的情况下, 需要考虑如下几点: (1)算子的顺序改变 如果对应的 UID 没变,则可以恢复,如果对应的 UID 变了恢复失败。...如果commit失败(如网络故障等),Flink应用就会崩溃,然后根据用户重启策略进行重启,之后在重启commit。
Flink 中的每个函数和操作符都可以是有状态的(请参阅使用状态了解详细信息)。有状态函数在处理单个元素/事件时存储数据。 为了能够状态容错,Flink 需要对状态进行 checkpoint。...前提条件 Flink 的检查点机制与流和状态的持久存储进行交互。一般来说,它要求: 一个可持久化(或保存很长时间)的数据源,可以重放特定时间段的记录。...为了适当地存储较大的状态,Flink 也支持多种方法在其他状态终端存储状态以及对状态进行检查点操作。...迭代作业中的状态检查点 目前 Flink 只为无迭代作业提供处理保证。在迭代作业上启用检查点会导致异常。...为了在迭代程序上强制进行检查点操作,用户需要在启用检查点时设置特殊标志:env.enableCheckpointing(interval,force = true)。 6.
代码中,我们将状态存储方式由 MemoryStateBackend 修改为了 FsStateBackend,即使用外部文件系统,如 HDFS,来保存应用程序的中间状态,这样当 Flink JobManager...使用暂存点来停止和恢复脚本 当需要暂停脚本、或对程序逻辑进行修改时,我们需要用到 Flink 的暂存点机制(Savepoint)。...暂存点和检查点类似,同样保存的是 Flink 各个算子的状态数据(Operator State)。不同的是,暂存点主要用于人为的脚本更替,而检查点则主要由 Flink 控制,用来实现故障恢复。...在 YARN 上运行 要将脚本提交到 YARN 集群上运行,同样是使用 flink run 命令。...可重放的数据源 当出错的脚本需要从上一个检查点恢复时,Flink 必须对数据进行重放,这就要求数据源支持这一功能。Kafka 是目前使用得较多的消息队列,且支持从特定位点进行消费。
Flink对状态进行持久化的方式,就是将当前所有分布式状态进行“快照”保存,写入一个“检查点”(checkpoint)或者保存点(savepoint)保存到外部存储系统中。...保存点在原理和形式上跟检查点完全一样,也是状态持久化保存的一个快照;区别在于,保存点是自定义的镜像保存,所以不会由Flink自动创建,而需要用户手动触发。这在有计划地停止、重启应用时非常有用。...14.1.3 检查点算法 在Flink中,采用了基于Chandy-Lamport算法的分布式快照,可以在不暂停整体流处理的前提下,将状态备份保存到检查点。 1....从保存点启动应用程序时,Flink会将保存点的状态数据重新分配给相应的算子任务。 1. 保存点的用途 保存点与检查点最大的区别,就是触发的时机。...因此两者尽管原理一致,但用途就有所差别了:检查点主要用来做故障恢复,是容错机制的核心;保存点则更加灵活,可以用来做有计划的手动备份和恢复。保存点可以当作一个强大的运维工具来使用。
Oceanus对Flink作业运行时的多个运行指标进行采集,包括Task Manger的内存,I/O和GC等。...基于Flink实现端到端Exactly Once传输 Flink通过检查点(Checkpoint)机制来进行任务状态的备份和恢复。...在任务发生故障时,任务可以从上次备份的状态恢复,而不必从头开始重新执行。通过检查点机制,Flink可以保证在发生故障时,仍然可以实现Exactly Once的数据传输。...但在整个数据接入的链路中,除了Flink之外还包括了上游的中间件和下游的数据仓库等多个组件。...我们通过Flink将采集到的指标按照分钟粒度进行聚合,并在执行checkpoint时将这些聚合指标保存到外部存储中。
如果应用程序发生故障(由于机器,网络或软件故障),Flink会停止分布式流式数据流。然后系统重新启动算子并将其重置为最新的成功检查点。输入流被重置为状态快照的时间点。...为了实现这个机制的保证,数据流源(如消息队列或代理)需要能够将流重放到定义的最近时间点。Apache Kafka有这个能力,而Flink的Kafka连接器就是利用这个能力。...默认情况下,会存储在JobManager的内存中,但是在生产环境下,应该配置为分布式可靠存储系统(如HDFS)。在状态被存储之后,算子确认检查点,将快照barriers发送到输出流,然后继续进行。...要做到这一点,算子必须能够产生一个状态对象,以某种方式进行存储以便对算子状态进行修改后不会影响该状态对象。例如,copy-on-write数据结构(如RocksDB中使用的数据结构)具有这种功能。...只有在所有sink接收到Barriers并且所有有状态的算子已经确认完成备份(可能在Barriers到达sink之后)时检查点才算完成。 有关状态快照的详细信息,请参阅状状态后端。 3.
领取专属 10元无门槛券
手把手带您无忧上云