第一章、Flink的容错机制
第二章、Flink核心组件和工作原理
第三章、Flink的恢复策略
第四章、Flink容错机制的注意事项
第五章、Flink的容错机制与其他框架的容错机制相比较
目录
第二章、Flink核心组件和工作原理
Ⅰ、核心组件
1. Checkpoint组件:
2. Savepoint组件:
3. Barrier组件
4. State Backend组件
5. Recovery Strategy组件
6.Failover Strategy组件
7.Job Restart Strategy组件
Ⅱ、核心组件的工作原理
1. Checkpoint工作原理:
2. Savepoint工作原理:
第二章、Flink核心组件和工作原理
Ⅰ、核心组件
-
Flink
的容错机制的核心组件包括Checkpoint
和Savepoint
。等等.. .. ..
1. Checkpoint
组件:
一致性检查点
-
Checkpoint是用于容错和恢复的机制
-
Checkpoint
是Flink
实现容错机制最核心的功能组件,也是Flink
四大基石之一,它在数据流处理过程中定期捕获作业状态的快照,并将其存储在可靠的存储系统中。 -
当作业发生故障时,
Flink
可以从最近的 Checkpoint 恢复,重新处理数据流,以保证数据的完整性和一致性。Checkpoint 的频率和大小可以通过配置参数进行设置。
2. Savepoint
组件:
保存点
-
Savepoint
则是用备份机制,于手动恢复的点。 -
Savepoint
是Flink
提供的一种备份机制,用于将作业的状态保存到一个指定的位置。 -
与 Checkpoint 不同,
Savepoint
不是为了容错而设计的,而是为了在升级作业或修改作业时能够恢复到之前的状态。通过创建一个Savepoint
,用户可以确保在升级或修改作业后能够回滚到之前的状态,而不会丢失数据或影响数据处理的正确性。
3. Barrier
组件
分界线
-
在检查点过程中,
Flink
使用分界线来确保到达某个检查点之前的所有数据变更都被包含在该检查点中。 -
分界线是一种特殊的数据形式,它沿着数据流向下传递,当所有相关的任务都收到了分界线,那么就可以认为该检查点完成了。
4. State Backend
组件
状态后端
-
状态后端是负责存储和管理任务状态的组件。
-
Flink
支持多种状态后端实现,包括内存状态后端
(MemoryStateBackend
)、文件系统状态后端
(FsStateBackend
)和RocksDB状态后端
(RocksDBStateBackend
)等。 -
状态后端负责将任务的状态保存到检查点,并在故障发生时从检查点恢复数据状态。
5. Recovery Strategy
组件
恢复策略
-
恢复策略定义了在发生故障时,如何从检查点恢复数据状态。
-
Flink
提供了多种恢复策略,包括固定延时重启策略
、失败率重启策略
等, -
用户可以根据应用的需求进行定制。
6.Failover Strategy
组件
故障恢复策略
故障恢复策略是Flink
容错机制的一部分,它规定了在单个任务失败时,应如何恢复。Flink
支持多种故障恢复策略,如RestartAll
、RestartIndividualStrategy
和RestartPipelinedRegionStrategy
等,这些策略决定了在任务失败时应重启哪些任务。
7.Job Restart Strategy
组件
作业重启策略
作业重启策略是Flink
容错机制的另一个重要组成部分,它规定了在作业级别发生故障时应如何恢复。Flink
提供了多种作业重启策略,如FixedDelayRestartStrategy
、FailureRateRestartStrategy
和NoRestartStrategy
等,这些策略决定了在作业失败时应如何重启作业。
Ⅱ、核心组件的工作原理
1. Checkpoint
工作原理:
Checkpoint
是 Flink
实现容错机制最核心的功能。
它能够根据配置周期性地基于Stream
中各个Operator
的状态来生成快照,这些状态数据会被定期持久化存储下来。当Flink
程序一旦意外崩溃时,可以从这些快照进行恢复,修正因为故障带来的程序数据状态中断。在Checkpoint过程中,会在多个分布式Stream Source中插入一个Barrier标记
,这些Barrier
会根据Stream中的数据记录一起流向下游的各个Operator。当一个Operator接收到一个Barrier时,它会暂停处理Stream中新接收到的数据记录。当所有Stream中的Barrier都已经到达该Operator,这时所有的Barrier在时间上看来是同一个时刻点(表示已经对齐),在等待所有Barrier到达的过程中,Operator的Buffer中可能已经缓存了一些比Barrier早到达Operator的数据记录(Outgoing Records),这时该Operator会将数据记录(Outgoing Records)发射(Emit)出去,作为下游Operator的输入,最后将Barrier对应快照发射(Emit)出去作为此次Checkpoint的结果数据。
-
周期性触发:Checkpoint 是定期触发的,通常每隔一定数量的数据记录或一定时间间隔触发一次。这个频率可以根据需要进行配置,但一般来说,太频繁的 Checkpoint 会增加资源消耗,而太稀少的 Checkpoint 则可能无法满足容错的需求。
-
数据同步:在 Checkpoint 触发时,
Flink
会暂停数据流的处理,并将已经处理的数据记录写入到持久化存储中。这个过程需要确保数据记录的一致性,避免出现数据丢失或重复的情况。 -
状态持久化:除了数据记录之外,Checkpoint 还会将各个 Operator 的状态信息也写入到持久化存储中。这些状态信息包括 Operator 的内部状态、缓冲区中的数据等。通过将状态信息持久化,
Flink
可以在故障发生时,利用最新的 Checkpoint 进行恢复,保证数据的完整性和一致性。 -
数据校验:为了确保 Checkpoint 的正确性和完整性,
Flink
还会对写入持久化存储的数据记录和状态信息进行校验。校验通常使用一些哈希算法或其他校验机制进行数据完整性的验证。 -
恢复机制:当
Flink
作业发生故障时,Flink
会根据配置的恢复策略,从最新的Checkpoint
中读取数据记录和状态信息,并将作业恢复到 Checkpoint 时的状态。这个过程可以确保数据的完整性和一致性,避免因故障导致的数据丢失或不一致。
补充:
在
Apache Flink
中,Operator 是数据流处理的基本单元,负责处理一部分数据流。每个 Operator 根据其功能和需求,会对输入的数据进行相应的转换和处理。
Operator的作用:
数据转换:将一个或多个数据流转换成新的数据流。这个过程中,Operator 会对输入的数据进行各种计算和转换,以满足后续处理的需求。
数据处理:根据具体需求,Operator 可以进行各种数据处理操作,例如过滤、聚合、连接等。这些操作可以帮助用户实现更复杂的数据处理逻辑。
数据分发:Operator 负责将处理后的数据发送到下游的 Operator 或存储系统。在这个过程中,Operator 会根据配置的策略,将数据发送到不同的目标,实现数据的分布式处理和存储。
2. Savepoint
工作原理:
Savepoint
是用户触发的一种机制,它创建了程序全局状态的一个镜像。与Checkpoint不同,Savepoint
不是为了容错而设计的,而是为了在升级作业或修改作业时能够恢复到之前的状态。通过创建一个 Savepoint
,用户可以确保在升级或修改作业后能够回滚到之前的状态,而不会丢失数据或影响数据处理的正确性。当触发 Savepoint
时,Flink
会将作业的状态保存到一个指定的位置,这个状态包含了作业的所有状态信息,包括各个 Operator 的状态。用户可以使用 Savepoint
来恢复作业到之前的状态,重新处理数据流。
-
触发
Savepoin
t:用户通过触发Savepoint
,通知Flink
将当前作业的状态保存到指定的位置。这个操作是手动的,需要用户显式地触发。 -
保存状态:
Flink
会将当前作业的状态信息保存到指定的存储系统中。这些状态信息包括各个 Operator 的状态、缓冲区中的数据等。 -
生成快照:在
Savepoint
触发时,Flink
会生成一个快照,这个快照包含了当前作业的状态信息。这个快照可以被视为一个一致性的状态,表示在Savepoint
触发时的作业状态。 -
恢复状态:当需要从
Savepoint
恢复作业时,Flink
会从快照中读取状态信息,并将作业恢复到Savepoint
触发时的状态。这样就可以保证在升级或修改作业后,能够回滚到之前的状态,而不会丢失数据或影响数据处理的正确性。