Flink中的State概念及其扩容算法 state是什么意思( 二 )


在Flink中对不同类型的State有不同的扩容办法,接下来我们分离介绍 。
OperatorState对扩容的处置我们选取Flink中某个具体Connector实现实例进行介绍,以MetaQ为例,MetaQ以topic方法订阅数据,每个topic会有N>0个分区,以上图为例,假设我们订阅的MetaQ的topic有5个分区,那么当我们source由1个并发调剂为2个并发时候,State是怎么恢复的呢?
State 恢复的方法与Source中OperatorState的存储构造有必定关系,我们先看MetaQSource的实现是如何存储State的 。首先MetaQSource 实现了ListCheckpointed<T extends Serializable>,其中的T是Tuple2<InputSplit,Long>,我们在看ListCheckpointed接口的内部定义如下:
public interface ListCheckpointed<T extends Serializable> {    List<T> snapshotState(long var1, long var3) throws Exception;    void restoreState(List&资源网lt;T> var1) throws Exception;}我们发明 snapshotState办法的返回值是一个List<T>,T是Tuple2<InputSplit,Long>,也就是snapshotState办法返回List<Tuple2<InputSplit,Long>>,这个类型解释state的存储是一个包括partiton和offset信息的列表,InputSplit代表一个分区,Long代表当前partition读取的offset 。InputSplit有一个办法如下:
public interface InputSplit extends Serializable {    int getSplitNumber();}也就是说,InputSplit我们可以懂得为是一个Partition索引,有了这个数据构造我们在看看上面图所示的case是如何工作的?当Source的并行度是1的时候,所有打partition数据都在同一个线程中读取,所有partition的state也在同一个state中保护,State存储信息格局如下:

Flink中的State概念及其扩容算法 state是什么意思

文章插图
【Flink中的State概念及其扩容算法 state是什么意思】


推荐阅读