1. state的整個繼承圖以下spa
2.3d
InternalKVState 提供了只對 Flink 引擎暴露的接口好比 namespace set/get、val get、namespace merging,這些接口並不穩定,Flink 引擎但願對上層應用屏蔽,而經過 State 接口暴露出來的方法普通用戶是能夠使用的。code
用戶拿到 InternalKVState 的具體實現 HeapXXXState/RocksDBXXXState 後,即可以對背後的存儲進行狀態讀寫blog
2.1內部狀態接口繼承
2.2面向用戶的接口接口
update
方法更新狀態值,經過value()
方法獲取狀態值。add
方法往列表中附加值;也能夠經過get()
方法返回一個Iterable<T>
來遍歷狀態值。add
方法添加值的時候,會調用reduceFunction,最後合併到一個單一的狀態值。add
方法中傳入的元素類型不一樣(這種狀態將會在Flink將來版本中被刪除)。put
或putAll
方法添加元素4.StateDescriptorip
State 既然是暴露給用戶的,那麼就須要有一些屬性須要指定:state 名稱、val serializer、state type info。在對應的statebackend中,會去調用對應的create方法獲取到stateDescriptor中的值。Flink經過StateDescriptor
來定義一個狀態。這是一個抽象類,內部定義了狀態名稱、類型、序列化器等基礎信息。與上面的狀態對應,從StateDescriptor
派生了ValueStateDescriptor
, ListStateDescriptor
等descriptorci
最後來一張較爲全面的圖get