1. 程式人生 > >Flink處理函式實戰之一:深入瞭解ProcessFunction的狀態(Flink-1.10)

Flink處理函式實戰之一:深入瞭解ProcessFunction的狀態(Flink-1.10)

### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ### 歡迎訪問我的GitHub > 這裡分類和彙總了欣宸的全部原創(含配套原始碼):[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) ### Flink處理函式實戰系列連結 1. [深入瞭解ProcessFunction的狀態操作(Flink-1.10)](https://blog.csdn.net/boling_cavalry/article/details/106040312); 2. [ProcessFunction](https://xinchen.blog.csdn.net/article/details/106299035); 3. [KeyedProcessFunction類](https://xinchen.blog.csdn.net/article/details/106299167); 4. [ProcessAllWindowFunction(視窗處理)](https://xinchen.blog.csdn.net/article/details/106453229); 5. [CoProcessFunction(雙流處理)](https://xinchen.blog.csdn.net/article/details/109614001); ### 關於ProcessFunction狀態的疑惑 學習Flink的ProcessFunction過程中,官方文件中涉及狀態處理的時候,不止一次提到只適用於keyed stream的元素,如下圖紅框所示: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202011/485422-20201119093516199-170105492.png) 之前寫過一些flink應用,keyed stream常用但不是必須用的,所以產生了疑問: 1. 為何只有keyed stream的元素能讀寫狀態? 2. 每個key對應的狀態是如何操作的? ### Flink的"狀態" 先去回顧Flink"狀態"的知識點: 1. 官方文件說就兩種狀態:keyed state和operator state: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202011/485422-20201119093516766-1230275812.png) 2. 如上圖,keyed stream的元素是具有key的特徵,與ProcessFunction的操作狀態時要求匹配,其他steam的元素由於沒有key的特徵,所以也就沒有狀態一說了; 3. 另一種狀態是Operator State,如下圖,這是和多並行度計算時的運算元例項繫結的,例如當前運算元消費kafka的某個分割槽的最新offset,而ProcessFunction是用來處理stream元素的,不會涉及到Operator State: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202011/485422-20201119093517256-54642864.png) ### 官方demo 為了學習ProcessFunction就去看官方demo,地址是:https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/stream/operators/process_function.html ,簡單說說這個demo的功能: 1. 資料來源在不間斷的產生單詞,每個單詞對應一