开发者学堂课程【开源 Flink 极速上手教程:Fault-tolerance in Flink】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/331/detail/3710
Fault-tolerance in Flink(三)
四、Flink 的状态管理
1.Flink 状态管理
首先定义一个状态,在例子里边,需要给出其它的信息,一个是它的状态识别 ID 的一个唯一名称,一个是它的状态数据类型。在 case 里就是一个 mypolo 自定义的一个 photo 类型。然后,会向它本地状态后端来去注册的状态,再从本地的状态后端去理解。
2.Flink 本地状态后端-JVM Heap
Flink 本地后端有两种。一种是它任务本地的。它里边的数据,实际上就是搜索对象的代理,它的读写都是以对象的形式去书写的,所以它非常的快。但是,它也有两个问题,第一个就是对象的方式,它实际上比磁盘上序列化压缩之后的数据膨胀了很多倍,通常来说都会达到十倍,所以它占用的空间更大。第二个,如果数据量大了之后,它有可能导致 DC 的问题,很严重。那第二个,是读写的时候不做序列化,但是它在平常操作的时候,需要数据,所以它的义务在发展的过程或以上没问题。另外,额外的开销,在做采矿的时候,它的 CPU 消耗就增加的很厉害。
3. Flink 本地状态后端-RocksDB
第二种类型的状态,后端是 RocksDB。它实际上是在读写的时候,就进行数据的资料录入,所以它读写的速度比LVM需要更多的时间,很多在普通的 APP 里应用。它的优点是 L3结构,天生综合之后生成一些文件,所以它在异步上传的过程当中,只是一个文件的拷贝,CPU 的消耗低,带动快。
五、总结
第一个是有状态的计算。
首先有一个无穷无尽的数据源。然后,本地的一个运算的进程,进程里面有逻辑,然后去处理一笔一笔的数据。接下来是分布式的流程。就是对流进行划分,然后处理。接下来又介绍了什么叫做状态,就算状态只处理一次事件就是状态计算,时间之间有关联,需要记录并去处理比较有状态的。那也介绍了状态有哪几种驱动。窗口统计,还有就是历史数据的记录分析。
第二个全局一致性快照。
因为 Flink 是一个分布式的系统。所以介绍了分布式系统的全局一致性拍照。这是拍照的部分,一个是经常本地的状态。接下来说到什么叫重新知性,质性的定义是如果两个事件先后发生,那如果后面发生这件事情之前被包含在一个通道,前面的时间也可以让你满足这种条件。第二个,Flink 里边很多产品是依赖一种支持 SAS 去运行的,规避掉了对广告消息的一个情景。从而能够大大的降低它这种扩张的存储空间。
第三个是 Flink 的容错机制
这里有一个 berry,它对应的是 mark。然后拍照的过程,有一个长远的考虑,没法来去注入担任复发拍照,然后,拍照的执行过程当中,它是随时传输数据的。每一个节点都只需要其它本地的状态就行了地方比展览。最后解除的条件,这样也是中部的软件去判断的,所有的节点本地的材料都做完了,数据比较完整的拍照。也举一个例子,流程怎么样。到最后还介绍了,如果是更复杂的场景,如果是去掉一个多流。
然后,介绍了 Flink 里边的状态是怎么管理的,除了这种全局的一次性拍照的这种。数据备份恢复之外,都有两种不同的本地存储的选择,一种是直接用的 JVM,它的好处在于它的速度很快,它以对象的形式没有区别化的数据化。但是它的问题是占的空间太大,它能处理的状态数据量比较小。然后一旦太大就会产生严重的问题。所以在生产当中,只能当数据量正常处理小。另外,还有一种状态存储是 RocksDB,它的好处是数量大,然后它的坏处是日常数据传输慢,处理速度不够快。