前言:本篇关注Flink,对Fault Tolerance的源码实现进行阐述,主要介绍Api层及Flink现有实现。
本篇文章重点关注以下问题:
- 具备Fault Tolerance能力的两种对象:Function和Operator
-
分析两个接口,列举典型实现,并做简要分析
1. 具备Fault Tolerance能力的两种对象
- Function
- Operator
1.1 Function对象
org.apache.flink.api.common.functions.Function
所有用户自定义函数的基本接口,如已经预定义的FlatMapFunction就是基础自Function,Function并未定义任何方法,只是作为标识接口。
所有Function对象的Fault Tolerance都是通过继承CheckpointedFunction接口实现的,换话说,容错能力是Function的可选项,这点与Operator不同
1.2 Operator对象
org.apache.flink.streaming.api.operators.StreamOperator
所有Operator的基本接口,如已经预定义的StreamFilter、StreamFlatMap就是StreamOperator的实现。与Function是标识接口不同,StreamOperator内置了几个和检查点相关的接口方法,因此,在Operator中,容错能力是实现Operator的必选项,这点不难理解,因为Operator处于运行时时,诸如分区信息都是必要要做快照的。
2. CheckpointedFunction
org.apache.flink.streaming.api.checkpoint. CheckpointedFunction
CheckpointedFunction接口是有状态转换函数的核心接口,两个接口方法:
- initializeState:Function初始化的时候调用,一般用作初始化state数据结构。
- snapshotState:请求state快照时被调用,方法签名中的参数FunctionSnapshotContext可以获取此Function中的所有State信息(快照),通过该上下文,可以获取该Function之前变更所产生的最终结果。
2.1 FlinkKafkaProducerBase
org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase
方法签名:
public abstract class FlinkKafkaConsumerBase<T> extends RichParallelSourceFunc |