By 大数据技术与架构 场景描述:本文由小米的王加胜同学分享,文章介绍了 Apache Flink 在小米的发展,从 Spark Streaming 迁移到 Flink ,在调度计算与调度数据、Mini...,才能合理地初始化资源,避免资源的重复创建;这就提高了使用门槛,容易埋下隐患;通过业务支持发现,在实际生产过程中,经常会遇到大并发的 Spark Streaming 作业给 Kafka 或 HBase...总之,通过对比可以看出,Flink 的 streaming 模式对于低延迟处理数据比较友好,Spark 的 mini batch 模式则于异常恢复比较友好;如果在大部分情况下作业运行稳定的话,Flink...,之前的数据无法反序列化出来的情况(这也是 Spark Streaming Checkpoint 的一个痛点,在业务使用中经常出现修改了代码之后,无法从 Checkpoint 恢复的问题);当然Java...,可能在恢复状态时出现不兼容问题(目前 Flink仅支持 POJO 和 Avro 的格式兼容升级)。
AS rownum FROM table_name) WHERE rownum <= N [AND conditions] 作业提交后,程序运行时一切正常;但是一旦把作业暂停(做快照),然后恢复时...但是,从调试中我们可以看到,类名、生成的代码其实有微小差别(后缀数字不一样)。...image.png 这里的后缀其实没有特别含义,是 Flink 在生成 Java 代码时,为了避免类、变量冲突而维护的一个自增变量,只与生成顺序有关,与代码逻辑无关。...在代码生成过程中,类名和变量名都是自增生成的,这也是为什么之前我们截图里两个 comparator 的逻辑一样,类名和代码中的变量名类似但不一致的原因。 4....首次访问时,由于这里用了延迟初始化(Lazy Initialization)机制,会检查这个 ValueStateDescriptor 里面封装的 comparator(新作业代码生成的)与快照恢复时里面记录的
Flink 线上用户有必要担心在作业升级(应用程序代码和Flink本身),出现故障以及应用程序和集群维护的过程中作业的表现情况。 2....保存点:版本化状态 在 Flink 中,我们引入了保存点功能,可以解决上述问题以及未来更多问题。保存点可以从正在运行的 Flink 作业上获取,实质上是在一个时间点上定义可以从外部访问的作业的快照。...要从保存点恢复作业,只需运行如下即可: flink run -s pathToSavePoint jobJar 使用保存点,不必从头开始重新读取事件流以重新填充 Flink 作业的状态,因为你可以随时获取一致性快照并从该检查点恢复...举个例子,利用 t1 时间点的保存点,我们使用修改了的应用程序代码来恢复作业,创建 v1 作业。在时间 t3 和 t4,分别从版本 v0 和 v1 获取更多的保存点。...通过获取作业的保存点,使用新的代码从该保存点重新启动,下游应用程序看不到任何差异。
前言 为了保证程序的容错恢复以及程序启动时其状态恢复,几乎所有的 Flink 实时任务都会开启 Checkpoint 或者触发 Savepoint 进行状态保存。...Flink Savepoint 你可以把它当做在某个时间点程序状态全局镜像,以后程序在进行升级,或者修改并发度等情况,还能从保存的状态位继续启动恢复。...Flink Checkpoint 2.1 Flink Checkpoint 原理 Flink Checkpoint 机制保证 Flink 任务运行突然失败时,能够从最近 Checkpoint 进行状态恢复启动...当程序突然遇到异常,进行容错恢复,那么就会从最新的 Checkpoint 进行状态恢复重启,上一部分还会进入 Flink 系统处理: 上图中表示,在进行 chk-5 Checkpoint 时,突然遇到程序异常...使用 DataStream 程序开发时,最好为每个算子分配 uid,这样即使作业拓扑图变了,相关算子还是能够从之前的状态进行恢复,默认情况下,Flink 会为每个算子分配 uid,这种情况下,当你改变了程序的某些逻辑时
SplitEnumerator 和 SourceReader 通过 Flink 的分布式快照机制持久化状态,发生异常时从状态恢复。...该类保存了数据分片 id、文件路径、数据分片起始位置的文件偏移(我们这里整个文件作为一个数据分片,不再细分,因此偏移始终为 0)、文件长度、文件读取进度(恢复时从该位置继续数据读取)。...5.在浏览器输入 http://localhost:8081 进入 Flink UI 界面,点击 'Running Jobs',可看到我们正在运行的作业,点击作业进入作业详情,选择 Checkpoints.../bin/taskmanager.sh start 7.稍等一会儿,我们可在 Flink UI 里观察到作业从 checkpoint 恢复的信息。...8.同时我们在 taskmanager 日志里可观察到作业恢复时的数据分片信息包含 checkpoint 时保存的文件读取 offset 信息。
Flink 1.7.0 版本中社区添加了状态变化,允许我们灵活地调整长时间运行的应用程序的用户状态模式,同时保持与先前保存点的兼容。通过状态变化,我们可以在状态模式中添加或删除列。...本地恢复 Apache Flink 1.7.0 通过扩展 Flink 的调度来完成本地恢复功能,以便在恢复时考虑之前的部署位置。...恢复保存点时对模式迁移的新支持 使用Flink 1.7.0,我们在使用AvroSerializer时添加了对更改状态模式的支持。...保存点兼容性 TraversableSerializer 此序列化程序(FLINK-11539)中的更新,包含Scala的Flink 1.2中的保存点将不再与Flink 1.8兼容。...考虑这个例子:如果你有一个正在消耗topic的Kafka Consumer A,你做了一个保存点,然后改变你的Kafka消费者而不是从topic消费B,然后从保存点重新启动你的工作。
close-operators dispose-operators task-specific-cleanup common-cleanup 如上所示,在恢复任务配置并初始化一些重要的运行时参数之后...这是在setInitialState()中完成的,在两种情况下特别重要: 1.当任务正在从失败中恢复并从最后一个成功的检查点重新启动时;2.当从保存点(savepoint[5])恢复时。...每个有状态Operator都应该覆盖这个方法,并且应该包含状态初始化逻辑,无论是第一次执行作业时,还是任务从失败中恢复或使用保存点时。...简而言之,称为CheckpointBarriers的特殊元素由作业的源任务定期注入到输入数据流中,并随实际数据从源迁移到sink。...在执行检查点时,任务仍然可以接收输入数据,但数据将被缓存,并仅在检查点成功完成后才被下游处理和发送。 中断执行 在前面的部分中,我们描述了一直运行到完成的任务的生命周期。
5)初始化相关运行环境,打印软件版本、运行环境、命令行参数、classpath 等信息 6)加载flink配置文件、初始化文件系统、启动各种内部服务(RpcService、HAService、BlobServer...、命令行参数项、classpath等信息 2)注册处理各种SIGNAL的handler:记录到日志 3)注册JVM关闭保障的shutdown hook:避免JVM退出时被其他shutdown hook...阻塞 4)打印YARN运行环境信息:用户名 5)从运行目录中加载flink conf 3、AM启动过程 1)创建并启动各类内部服务(包括RpcService、HAService、BlobServer...退出时被其他shutdown hook阻塞 加载flink配置文件、初始化文件系统、启动各种内部服务(RpcService、HAService、BlobServer、HeartbeatServices...这里以flinkX中的代码为例: 会被invoke()中的open-operators()执行并调用到DtInputFormatSourceFunction的open方法恢复状态做一些初始化工作。
关键词:Flink 容错机制 作为分布式系统,尤其是对延迟敏感的实时计算引擎,Apache Flink 需要有强大的容错机制,以确保在出现机器故障或网络分区等不可预知的问题时可以快速自动恢复并依旧能产生准确的计算结果...合适的重启策略可以减少作业不可用时间和避免人工介入处理故障的运维成本,因此对于 Flink 作业稳定性来说有着举足轻重的作用。下文就将详细解读 Flink 的错误恢复机制。...等外部服务;而故障恢复则通常要求将状态持久化到外部存储,然后在故障出现时用于初始化新的进程。...TaskManager 上运行的所有 Tasks 标记为失败,从而触发 Flink 作业执行的容错机制以恢复作业。...JobMaster 保存了很多对作业执行至关重要的状态,其中 JobGraph 和用户代码会重新从 HDFS 等持久化存储中获取,checkpoint 信息会从 zookeeper 获得,Task 的执行信息可以不恢复因为整个作业会重新调度
5)初始化相关运行环境,打印软件版本、运行环境、命令行参数、classpath 等信息 6)加载flink配置文件、初始化文件系统、启动各种内部服务(RpcService、HAService、...、命令行参数项、classpath等信息 2)注册处理各种SIGNAL的handler:记录到日志 3)注册JVM关闭保障的shutdown hook:避免JVM退出时被其他shutdown hook阻塞...4)打印YARN运行环境信息:用户名 5)从运行目录中加载flink conf 3、AM启动过程 1)创建并启动各类内部服务(包括RpcService、HAService、BlobServer、...退出时被其他shutdown hook阻塞 加载flink配置文件、初始化文件系统、启动各种内部服务(RpcService、HAService、BlobServer、HeartbeatServices...这里以flinkX中的代码为例: 会被invoke()中的open-operators()执行并调用到DtInputFormatSourceFunction的open方法恢复状态做一些初始化工作。
---- Flink 容错机制 Checkpoint State Vs Checkpoint State: 维护/存储的是某一个Operator的运行的状态/历史值,是维护在内存中!...里面存放就是maxBy这个Operator中的最大值) State数据默认保存在Java的堆内存中/TaskManage节点的内存中 State可以被记录,在失败的情况下数据还可以恢复 Checkpoint...是把State数据定时持久化存储了 比如KafkaConsumer算子中维护的Offset状态,当任务重新恢复的时候可以从Checkpoint中获取 注意: Flink中的Checkpoint底层使用了...在分布式情况下,不推荐使用本地文件。因为如果某个算子在节点A上失败,在节点B上恢复,使用本地文件时,在B上无法读取节点 A上的数据,导致状态恢复失败。.../checkpoints 在代码中配置 //1.MemoryStateBackend--开发中不用 env.setStateBackend(new MemoryStateBackend
Flink的核心功能 架构 任务执行过程的两个主要组件是作业管理器和任务管理器。主节点上的作业管理器启动工作节点。在工作节点上,任务管理器负责运行。任务管理器还可以同时运行多个任务。...任务的资源管理由Flink中的作业管理器完成。在Flink群集中,Flink作业作为YARN应用程序执行。HDFS用于存储恢复和日志数据,而ZooKeeper用于对作业进行高可用性协调。 ?...您可以使用Flink将应用程序的状态本地存储在状态后端中,以确保在访问已处理数据时降低延迟。您还可以创建检查点和保存点,以在持久性存储上对流式应用程序进行容错备份。 ?...检查点和保存点 可以创建检查点和保存点,以使Flink应用程序在整个管道中容错。Flink包含一个容错机制,该机制可以连续创建数据流的快照。快照不仅包括数据流,还包括附加的状态。...如果发生故障,则选择最新快照,然后系统从该检查点恢复。这保证了可以始终保持计算结果的一致性。当检查点由Flink创建和管理时,保存点由用户控制。保存点可以描述为已执行过程的备份。 ?
具体现象如下: JobManager 在正常运行中,没有任何预兆地,突然报too old resource version错误,紧接着容器就自动退出了: 2020-10-17 14:51:36.289...该问题会触发 ResourceManager 对 JobManager 的重新初始化过程,作业也会从最近的一次 Checkpoint 恢复。...但是如果没有配置 HA(High Availability,高可用)时,Flink 就无法正常恢复作业,造成运行中关键状态的丢失,这对线上业务是无法接受的。...毕竟,这种可恢复的异常,可能会在一个长期运行作业的运行周期内多次出现,平台方需要考虑到细粒度的容错,令客户的作业能够长期平稳运行。...后来我们偶然间发现,重启 API Server 服务可以复现该问题,因为新启动的 API Server 会从 etcd 中获取当前最新 resourceVersion,如果客户端后续用保存的旧值请求的话
SplitEnumerator 和 SourceReader 通过 Flink 的分布式快照机制持久化状态,发生异常时从状态恢复。...该类保存了数据分片 id、文件路径、数据分片起始位置的文件偏移(我们这里整个文件作为一个数据分片,不再细分,因此偏移始终为 0)、文件长度、文件读取进度(恢复时从该位置继续数据读取)。...在浏览器输入 http://localhost:8081 进入 Flink UI 界面,点击 'Running Jobs',可看到我们正在运行的作业,点击作业进入作业详情,选择 Checkpoints...稍等一会儿,我们可在 Flink UI 里观察到作业从 checkpoint 恢复的信息。 [e82f5t7yd1.png] 8....同时我们在 taskmanager 日志里可观察到作业恢复时的数据分片信息包含 checkpoint 时保存的文件读取 offset 信息。
命令行接口启动脚本是 $FLINK_HOME/bin目录下的flink脚本, 默认情况下会连接运行中的Flink master(JobManager),JobManager的启动脚本与CLI在同一安装目录下...如果operator在调用取消操作后没有停止,Flink将定期开启中断线程来取消作业直到作业停止。 调用停止Job是一种停止正在运行的流作业的更加优雅的方法。...如果保存点触发成功,该作业将被取消 2.3 恢复保存点 ./bin/flink run -s ......这个run命令提交Job时带有一个保存点标记,这使得程序可以从保存点中恢复状态。保存点路径是通过保存点触发命令得到的。 默认情况下,我们尝试将所有保存点状态与正在提交的作业相匹配。...如果当保存点触发时,从你程序中删除了作为程序一部分的operator,但是仍然要使用保存点,则需要允许这一点(You need to allow this if you removed an operator
任务链与算子链 在分布式运行中,Flink将算子(operator) SubTask 连接成 Task。每个 Task 都只由一个线程执行。...客户端作为触发执行的Java/Scala程序的一部分运行,或者在命令行中运行./bin/flink命令来运行…. 3....除了定义保存状态的数据结构之外,后端状态还实现了获取键/值状态的时间点快照逻辑并将该快照存储为检查点的一部分。 ? 5. 保存点 用Data Stream API编写的程序可以从保存点恢复执行。...保存点允许更新你的程序和你的Flink集群,而不会丢失任何状态。 保存点是手动触发的检查点,它会捕获程序的快照并将其写入后端状态。他们依赖于常规检查点机制。...保存点与这些定期检查点类似,只不过它们是由用户触发的,不会在新检查点完成时自动失效。
,以避免作业崩溃恢复后状态不一致;同样地,如果正在向下游算子发送数据并更新 offset 信息时,也不允许快照的进行。...这里也解释了在作业刚启动时,如果数据库较大(同步时间较久),Flink 刚开始的 Checkpoint 永远失败(超时)的原因:只有当 Flink 完整同步了全量数据后,才可以进行增量数据的处理,以及...周期,避免作业因 Checkpoint 失败而一直重启。...异常数据造成作业持续重启 默认情况下,如果遇到异常的数据(例如消费的 Kafka topic 在无意间混入了其他数据),Flink 会立刻崩溃重启,然后从上个快照点(Checkpoint)重新消费。...可以从中看到,Flink 1.13 主要着力于支持更多的类型(FLINK-18758[https://issues.apache.org/jira/browse/FLINK-18758]),以及允许从
外部检查点 Externalized Checkpoints 默认情况下检查点不会持久化存储在外部系统中,只是用来从故障中恢复作业。当一个程序被取消时它们会被删除。...但是,你可以配置检查点定期持久化存储在外部系统中,类似于保存点(savepoints)。这些外部持久化的检查点将其元数据写入持久性存储中,即使在作业失败时也不会自动清除。...这样,如果你的作业失败时,你会有一个检查点用于恢复作业。...2.3 从外部检查点恢复 作业可以通过使用检查点的元数据文件从外部检查点中恢复,就像从保存点恢复一样(请参阅保存点恢复)。...Checkpoints 外部检查点 savepoints 保存点 原文:https://ci.apache.org/projects/flink/flink-docs-release-1.4/ops
Tech 导读 本文综合Apache Flink原理与京东实时计算平台(JRC)的背景,详细讲述了大规模Flink流作业的调优方法。...阅读之前,建议读者对Flink基础组件、编程模型和运行时有较深入的了解。 01 TaskManager内存模型调优 在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。...在作业启动时,Network区域的全部内存都会初始化成Buffer,并按上一节所述的配额分配到RP和IG,Web UI中Netty Shuffle Buffers → Available一栏的Buffer...作业恢复时,首先尝试从有效的Secondary快照恢复状态,能显著提高恢复速度。如果Secondary快照不可用或不完整,再fallback到Primary恢复。如下图所示。...分拣平台API安全治理实战 Flutter状态管理新的实践 前端工程化在WMS 6.0中的实践 求分享 求点赞 求在看
领取专属 10元无门槛券
手把手带您无忧上云