今天我們給大家介紹一下flink中的state,什麼是state呢?大家可以理解為我們在處理數據的時候,每一個數據我們都會相應的為其準備一個空間存儲他的變化過程
1 狀態的簡介
在flink中,我們是把所有的數據都可以看做是有狀態的,比如我們在一個數據流中,我們要對一個數據流進行單詞計數統計,但是在這個過程中,如果程序突然中斷或者一些其他原因導致了我們的程序出現了fail,那這個時候我們就看可以用狀態來解決這種問題!使用狀態配合Checkpoint來解決就可以完美的規避掉這種生產事故的產生了!
2 State的分類
State分為兩類分別是:Keyed State和Operator State。在這之上,我們的狀態又分為託管狀態和原始狀態,在我們實際工作中,大多數都是採用的託管狀態,
2.1 Keyed State
Keyed State的意思就是我們的數據都是按照key進行劃分的,也就是相同的key狀態都會保存在一起,也就是說 蘋果都跟蘋果放在一起,香蕉都和香蕉放在一起,方便管理和操作!
其中我們一共有以下幾種儲存數據的方式如下:
ValueState:單值狀態並且與key綁定,可以通過update進行更新,和value進行取值
ListState:可以把這個理解為我們把數據的狀態都存放在一個list上,然後我們就可以使用list的方法啦,很是方便!
ReducingState:這種狀態我們可以簡單的理解我們要對狀態進行合併計算,如果是這種條件下我們就使用這種狀態!
MapState:顧名思義,這種狀態就是把狀態放到了map中,形成了k-v鍵值對,同樣類似於ListState我們就可以使用map中的一些方法了!
2.2 Operator State
這種狀態就是跟key無關,此時就需要我們自己去設定了,他的數據結構和keyed state類似,只不過區別在於Operator State是與key無關的
3 舉一個簡單地例子
如下圖:
因為我們輸入的單詞是一個流的狀態,我們需要把所有的單詞進行一個累加,我們把一個單詞出現的次數記作1,並且對其進行存儲,然後遇到相同的單詞再把次數進行累加,把這個求和值存儲到對應單詞的狀態中即可!
想要繼續深入學習flink嗎 ,請繼續關注咱們開課吧平臺,後續會有更多文章發放出來