在Flink中的KeyedState和OperatorState都有兩種形式,有什麼區別?
Managed State(託管狀態)
由Flink Runtime控制和管理狀態數據,並將狀態數據轉換成爲內存的Hash tables或 RocksDB的對象存儲,然後將這些數據通過內部的接口持久化到checkpoints中,任務異常時可以通過這些狀態數據恢復任務
RawState(原生狀態)
由算子自己管理數據結構,當觸發Checkpoint操作過程中,Flink並不知道狀態數據內部的數據結構,只是將數據轉換成bytes數據存儲在Checkpoints中,當從Checkpoints恢復任務時,算子自己再反序列化出狀態的數據結構
推薦
推薦:使用ManagedState管理狀態數據
優勢:ManagedState更好的支持狀態數據的重平衡以及更加完善的內存管理