理解ProcessFunction的Timer邏輯
歡迎訪問我的GitHub
這裡分類和彙總了欣宸的全部原創(含配套原始碼):https://github.com/zq2599/blog_demos
本文概覽
- 減少鋪墊,長話短說,本文作用是輔助理解Process Function的定時器,僅通過幾個關鍵點把定時器邏輯說清楚,因此文章很短;
- Flink官方有篇文章是講Process Function的,地址是:https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/operators/process_function.html
- 這篇文章中給出一個demo,裡面用了定時器,核心程式碼如下圖:
- 建議您先把上述官方程式碼看一遍,這樣再看過下面幾個關鍵點,就能熟練使用此定時器了;
定時器的幾個關鍵點
-
下圖紅框中的registerEventTimeTimer方法只要執行了,則藍框中的onTimer方法就會執行(之前曾天真的猜測第二次registerEventTimeTimer會覆蓋掉第一次註冊的timer,但實際上,只要registerEventTimeTimer的入參不同,就不會覆蓋):
-
如下圖,onTime方法執行時,timestamp的值是之前registerEventTimeTimer的入參:
-
最後一點也是最關鍵的一點:每次執行processElement都會修改state,所以,每次onTimer執行的時候,拿到的state都是最近一次processElement中寫入的值,因此,假設processElement執行10次,onTimer也會執行10次,但下圖紅框中的判斷只有最後一次等於ture,因為每次判斷時,左邊的timestamp都是不同的processElement產生的,但右邊的result.lastModified卻是同一個(最後一次processElement中寫入的):
舉例說明
第一次執行processElement,時間是12:01:01,因此state中記錄的是12:01:01,registerEventTimeTimer入參就是12:11:01(這就是第一個onTimer的timestamp入參)
第二次執行processElement,時間是12:01:05,因此state中記錄的是12:01:05,registerEventTimeTimer入參就是12:11:05(這就是第二個onTimer的timestamp入參)
第一個onTimer執行,timestamp是12:11:01,取得state是12:01:05,因此timestamp == result.lastModified + 60000判斷為false(12:11:01不等於12:11:05)
第二個onTimer執行,timestamp是12:11:05,取得state是12:01:05,因此timestamp == result.lastModified + 60000判斷為false(12:11:05等於12:11:05)
歡迎關注公眾號:程式設計師欣宸
微信搜尋「程式設計師欣宸」,我是欣宸,期待與您一同暢遊Java世界…
相關文章
- oracle 物理讀 邏輯讀的理解Oracle
- oracle 物理讀,邏輯讀的理解Oracle
- 工作284:理解繫結邏輯
- 理解Nginx中Server和Location的匹配邏輯NginxServer
- oracle邏輯儲存結構理解Oracle
- 計算機程式的思維邏輯 (66) - 理解synchronized計算機synchronized
- 創業黑箱:理解產品和商業的邏輯創業
- 【MM系列】SAP庫齡報表邏輯理解
- 題庫明細 使用java理解程式邏輯Java
- MySQL Redo log頁內邏輯怎麼理解MySql
- 計算機程式的思維邏輯 (82) – 理解ThreadLocal計算機thread
- 關於SVM數學細節邏輯的個人理解(一)
- 計算機程式的思維邏輯 (82) - 理解ThreadLocal計算機thread
- 2、從引數估計的角度理解邏輯迴歸邏輯迴歸
- 形式邏輯(普通邏輯)7:推理概述
- 下一代人工智慧:邏輯理解?物理理解?人工智慧
- 邏輯分析
- 邏輯難理解版本的輪播圖(實現無縫滾動)
- 邏輯有點難理解的Sql執行結果,以及用處SQL
- Flutter之Timer原理解析Flutter
- PostgreSQL邏輯備份pg_dump使用及其原理解析SQL
- 幾道經典邏輯推理題,提高你的邏輯思考能力
- 掌握 Promise 的邏輯方法Promise
- 推送的基礎邏輯
- oracle的邏輯結構Oracle
- mysql的邏輯備份MySql
- 面向需求的邏輯模型模型
- 對位運算與邏輯電路統一性的淺顯理解
- java邏輯控制Java
- java取反邏輯Java
- Linux Shell 邏輯運算子、邏輯表示式詳解Linux
- 認清 React 的useState邏輯React
- kubebuilder operator的執行邏輯UI
- JS 中的邏輯運算子JS
- angular2 的邏輯控制Angular
- 邏輯Data Guard的物件操作物件
- [zt] Oracle的邏輯結構Oracle
- 邏輯資料庫的管理資料庫