State的实现
Flink通过异步的checkpoint机制来实现流式处理过程中的容错,简单来讲就是定时地将本地的状态序列化到一个持久存储中,当出现错误是通过恢复检查点的状态来实现容错的,对于机制的详细介绍可以参见这个链接,本章主要讲述flink源码中state的实现。
StateBackend
flink将我们代码中的操作转化为一个个的task放在taskmanager中执行。其中每个task一个线程,每个task中包含了一个AbstractInvokable对象,task中的主要的逻辑就是调用AbstractInvokable.invoke()的方法。在流式处理中对应的实现都是继承自StreamTask。StreamTask中包含一个OperatorChain,并规定了一些hook函数来定义生命周期。AbstractStateBackend就是在这里进行初始化的。Flink的实现一共提供了3种state backend:MemoryStateBackend,FsStateBackend, 和RocksDBStateBackend。其中MemoryStateBackend主要用于调试开发中使用,后面2者适合于生产环境中使用。这三种实现均继承自AbstractStateBackend类。在StreamTask的初始化过程中会初始化OperatorChain中所有的operator,而AbstractKeyedBackend也是在这个过程中初始化的,而且一个StreamTask中只有一个,其实这个也符合常理,因为多个key by操作产生的operator必然在不同的线程中。