Flink WaterMark 的瞭解 (更新)

我來講下 我理解的WaterMark (一起探討)
/***
 * 如果要去了解一個東西 : 我認爲需要從以下幾個點去分析
 * 1. 是什麼(概念一點)
 * 2. 解決了什麼問題以及是如何解決的
 * 3. 如果去使用 如何下手
 * 4. 他會牽扯的一些問題
 *
 *  好了 讓我們去探討這個東西
 * 1. 首先 WaterMark 是一個全局標籤,本身是一個時間戳
 * 2. 其次 我認爲它解決的問題 就是 窗口的觸發時機以及對於亂序數據的數據保障(或者說數據亂序情況下依然分配進屬於它的窗口中)
 *      {
 *          1.窗口的觸發時機問題: (有兩個關鍵詞 1:Partition Watermark , 2:事件時間時鐘)
 *              -- 任務會對flink的輸入分區維護相應的Partition Watermark.
 *                  當檢測到某一分區有輸入後,系統會提取該輸入事件的watermark與當前分區的watermark 進行比較
 *                  並將大的watermark更新當前Partition watermark(相當於是一個更新操作);
 *                  更新後會將 Partition Watermark (分區) 中最小的那個watermark 作爲事件時間時鐘 向下遊發送 後續就是trigger的操作了
 *                 [watermark 就是告訴算子 不用再等 那些時間戳小於或等於該WaterMark的事件了]
 *
 *          2. 亂序數據的數據保障
 *              -- 可以在接收到事件後根據事件本身所攜帶的時間 - 延遲時間 後 通過 assigner 去做具體數據分配
 *      }
 *
 *    摘抄 有一個例子: 就是你在走,後面有一個小朋友也在走。他和你保持一個距離,小朋友只前進不後退。你有可能後退。
 *              但是如果你比小朋友還慢,就表示你遲到太久了,應該被單獨處理(丟棄/sideOutput)。
 *
 * 3. 關於具體使用的話 只需要去實現 兩種WaterMark的生成接口 按照自己業務去生成 其他信息看具體實現
 * {@link org.apache.flink.streaming.api.functions.AssignerWithPeriodicWatermarks<T>}
 * {@link org.apache.flink.streaming.api.functions.AssignerWithPunctuatedWatermarks<T>}
 *
 * 4. 牽扯到的問題 {
 *     1. 生成水位線的頻率 快/慢 各有優缺
 * }
 */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章