1.Checkpoint
检查点机制
2.State
状态
- 状态类型
1)原生状态(Raw State ) Raw State是开发者自己管理的,需要自己序列化。 2)托管状态(Managed State ) Managed State是由Flink管理的,Flink帮忙存储、恢复和优化。Managed State再进行细分,由两种类型:Keyed State 和Operator State 。 Keyed State:一个SubTask有多个State,每一个Key对应一个State。有ValueState,ListState,MapState等 Operator State:一个SubTask有一个State。有ListState,BroadcastState等 - 状态后端
Flink 内置了以下这些开箱即用的 state backends : ①HashMapStateBackend :状态数据以 Java 对象的形式存储在堆中。 ②EmbeddedRocksDBStateBackend :状态数据保存在 RocksDB 数据库中,数据被以序列化字节数组的方式存储,RocksDB 数据库默认将数据存储在 TaskManager 的数据目录。 如果不设置,默认使用 HashMapStateBackend 。 - 在Flink1.13版本对状态后端进行了改进,帮助用户更好理解本地状态存储和 checkpoint 存储的区分。
1)MemoryStateBackend 旧版本的 MemoryStateBackend 等价于使用 HashMapStateBackend 和 JobManagerCheckpointStorage。 2)FsStateBackend 旧版本的 FsStateBackend 等价于使用 HashMapStateBackend 和 FileSystemCheckpointStorage。 3)RocksDBStateBackend 旧版本的 RocksDBStateBackend 等价于使用 EmbeddedRocksDBStateBackend 和 FileSystemCheckpointStorage。使用RocksDB状态后端可以设置增量检查点,RocksDB是一个基于LSM树的KV存储。
3.Time
时间语义和水平线
- 时间语义
Flink在1.12版本后默认使用Event Time 1)处理时间(Process Time )数据进入Flink被处理的系统时间(Operator处理数据的系统时间) 2)事件时间(Event Time )数据在数据源产生的时间,一般由事件中的时间戳描述,比如用户日志中的TimeStamp。 3)摄取时间(Ingestion Time )数据进入Flink的时间,记录被Source节点观察到的系统时间。 - 水位线
flink1.11中对flink的水印生成接口进行了重构,创建watermark主要有以下三种方式 1)使用createWatermarkGenerator 创建watermark。 2)使用固定延时策略生成水印,调用WatermarkStrategy 中的静态方法forBoundedOutOfOrderness 。 3)使用单调递增的方式生成水印,调用WatermarkStrategy 中的静态方法forMonotonousTimestamps 。
4.Window
-
窗口: 1)Keyed Windows 2)Non-Keyed Windows 1)Tumbling Windows(滚动窗口) 2)Sliding Windows(滑动窗口) 3)Session Windows(会话窗口) 4)Global Windows(全局窗口) -
窗口函数 1)增量窗口函数 ①ReduceFunction ②AggregateFunction 可以统计窗口内数据的个数,进行求平均值等等。(局部计算,全局和并。) 2)全量窗口函数 ProcessWindowFunction 这个函数更加灵活,但是延迟性更高,且牺牲一定存储空间。 3)增量和全量窗口函数混合使用 兼顾两者优点 ReduceFunction+ProcessWindowFunction 或 AggregateFunction+ProcessWindowFunction
|