1.状态、状态后端、Checkpoint的区别和关系?
(1)状态:状态的本质是数据;
(2)状态后端:存储状态的方式,比如说Memory、filesystem、Rocksdb三种状态后端来存储的状态。
(3)CheckPoint(状态管理):主要是定时将状态后端中存储的状态(本地状态)同步到远程的存储系统的组件和能力,防止任务挂掉导致状态对视,产生数据质量问题;
状态的分类(两种):
注意!状态本身就是数据,flink有source算子、transformation算子、sink算子等,数据肯定是经过算子进行处理和计算的,
所以,状态有两类:
1.keyed-state: 键值状态(k-v形式存储),状态值和key绑定,flink中的keyby之后紧跟的算子的state就是键值状态;
2.operator-state:算子状态,状态值和算子绑定,flink中的kafka source算子中用于存储kafka offset的state就是算子状态;
2.状态后端的选择,什么样是业务场景会使用File system,什么样的业务场景使用RocksDB?
如果是State很大===》Rocksdb;
如果State不大 ===》File system;
(1)因为Rocksdb是使用磁盘存储State,所以会涉及到访问State磁盘序列化和反序列化等IO操作,性能会受到影响;
(2)因为File system是直接访问内存,单纯从访问State状态的性能来说,File system比Rocksdb好;
(3)Rocksdb是支持增量检查点的CheckPoint,File system每次是全量做CheckPoint;