对应的视频【Apache Flink 入门教程】2. Apache Flink 概念介绍:有状态流式处理引擎的基石_哔哩哔哩_bilibili
批式处理:把数据按照事件划分为一段一段的数据,每段数据进行处理,这种做法对于一些跨时间段的状态统计,就需要把上一个状态记录传到下面的时间段中进行计算,理想的情况就是所有的运行状态都能不断的累计,可以维护大量的状态信息,可以自动依据时间进行判断是否接收到了所有所需要的数据。直到接收完毕所有需要的数据以后输出运行结果,
流式处理:程序一批一批的处理无穷无尽的数据,在无穷无尽的数据流上长时间的运行。
分布式流式处理:通过数据中的某一个key进行分类,使得同样的key的数据能流到同样的计算实例上,
有状态分布式流式处理:对于运行中的状态进行存储,如果数据量过大需要一个状态后端来维护状态
1、状态容错
即保证状态精确一次的容错
简易场景下:每处理一批数据,就存储一次快照(状态和数据的位置),出错时按照快照信息进行重新的计算
分布式场景:在简易场景基础下建立一个全局统一的状态快照(将每一个算子每一批次的快照全部存储到一起)在遇到检查点时同步一次,如果出错就寻找一个拥有全部正常快照的批进行恢复计算
2、状态维护
能够维护处理中产生的大量状态
Flink 的状态后端只需要调用API就可以完成状态的维护,其中默认使用的是JVN Heap 当作状态后端,存储在内存中,状态的数据量过大的时候就可以使用RocksDB作为状态后端(存在硬盘中)
需要注意的是使用JVM Heap的时候状态作为Java对象是直接存在内存中,但是遇到检查点同步状态到统一状态快照中时就需要进行过序列化,而使用RocksDB时就需要序列化,而同步时也只需要复制状态即可,因为已经完成了序列化。
3、Event-time的处理
对于很多场景中需要使用的时间是事件实际发生的事件,而在数据流中这些数据却不一定是有序的,所以如何能判断接收到了足够的数据就是重中之重。
Flink中使用的就是watermarks,一个带有时间戳 t 的watermasks会让运算算子判定不在收到任何时间戳 4、状态的保存和迁移 当正在运行的计算由于各种原因需要重启的时候,如何恢复计算 Flink使用的是Savepoint 保存点 保存点的信息和检查点中的信息一样是各个算子的状态和数据位置,关闭以前保存一个保存点,重启以后就可以恢复到保存点的运行状态并且,利用EventTime可以赶上最新的数据