理解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世界…
相關文章
- 工作284:理解繫結邏輯
- 理解Nginx中Server和Location的匹配邏輯NginxServer
- 計算機程式的思維邏輯 (82) – 理解ThreadLocal計算機thread
- 【MM系列】SAP庫齡報表邏輯理解
- MySQL Redo log頁內邏輯怎麼理解MySql
- 題庫明細 使用java理解程式邏輯Java
- Flutter之Timer原理解析Flutter
- 關於SVM數學細節邏輯的個人理解(一)
- 下一代人工智慧:邏輯理解?物理理解?人工智慧
- 邏輯難理解版本的輪播圖(實現無縫滾動)
- 創新實訓(八)——題目相關的邏輯處理解釋
- 邏輯題
- PostgreSQL邏輯備份pg_dump使用及其原理解析SQL
- 幾道經典邏輯推理題,提高你的邏輯思考能力
- 掌握 Promise 的邏輯方法Promise
- 對位運算與邏輯電路統一性的淺顯理解
- 邏輯推理20201028
- 量子邏輯閘
- 邏輯運算子
- 邏輯迴歸邏輯迴歸
- java邏輯控制Java
- JS 中的邏輯運算子JS
- Python中的邏輯表示式Python
- kubebuilder operator的執行邏輯UI
- 認清 React 的useState邏輯React
- 3.2.2的Model的快取邏輯快取
- Quine-McCluskey兩級邏輯化簡演算法原理解析UI演算法
- 通過實驗理解PG邏輯結構:1 使用者(角色)
- 如何新建邏輯卷及磁碟掛載,邏輯卷擴容
- SAP UI5 BarcodeScannerButton 的初始化邏輯 - Cordova API 檢測等邏輯UIAPI
- 0504邏輯歸因
- 06--加密邏輯加密
- Python邏輯迴歸Python邏輯迴歸
- PostgreSQL:邏輯結構SQL
- LVM 邏輯卷管理LVM
- SCSS 邏輯運算子CSS
- 邏輯迴歸模型邏輯迴歸模型
- UI框架基本邏輯UI框架