flink系列(10)-狀態State和狀態描述StateDescriptor

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面向用戶的接口接口

 

  • ValueState:即類型爲T的單值狀態。這個狀態與對應的key綁定,是最簡單的狀態了。它能夠經過update方法更新狀態值,經過value()方法獲取狀態值。
  • ListState:即key上的狀態值爲一個列表。能夠經過add方法往列表中附加值;也能夠經過get()方法返回一個Iterable<T>來遍歷狀態值。
  • ReducingState:這種狀態經過用戶傳入的reduceFunction,每次調用add方法添加值的時候,會調用reduceFunction,最後合併到一個單一的狀態值。
  • FoldingState:跟ReducingState有點相似,不過它的狀態值類型能夠與add方法中傳入的元素類型不一樣(這種狀態將會在Flink將來版本中被刪除)。
  • MapState:即狀態值爲一個map。用戶經過putputAll方法添加元素

4.StateDescriptorip

State 既然是暴露給用戶的,那麼就須要有一些屬性須要指定:state 名稱、val serializer、state type info。在對應的statebackend中,會去調用對應的create方法獲取到stateDescriptor中的值。Flink經過StateDescriptor來定義一個狀態。這是一個抽象類,內部定義了狀態名稱、類型、序列化器等基礎信息。與上面的狀態對應,從StateDescriptor派生了ValueStateDescriptorListStateDescriptor等descriptorci

  • ValueState getState(ValueStateDescriptor)
  • ReducingState getReducingState(ReducingStateDescriptor)
  • ListState getListState(ListStateDescriptor)
  • FoldingState getFoldingState(FoldingStateDescriptor)
  • MapState getMapState(MapStateDescriptor)

最後來一張較爲全面的圖get

相關文章
相關標籤/搜索