在Flink中的KeyedState和OperatorState都有两种形式,有什么区别?
Managed State(托管状态)
由Flink Runtime控制和管理状态数据,并将状态数据转换成为内存的Hash tables或 RocksDB的对象存储,然后将这些数据通过内部的接口持久化到checkpoints中,任务异常时可以通过这些状态数据恢复任务
RawState(原生状态)
由算子自己管理数据结构,当触发Checkpoint操作过程中,Flink并不知道状态数据内部的数据结构,只是将数据转换成bytes数据存储在Checkpoints中,当从Checkpoints恢复任务时,算子自己再反序列化出状态的数据结构
推荐
推荐:使用ManagedState管理状态数据
优势:ManagedState更好的支持状态数据的重平衡以及更加完善的内存管理