我來講下 我理解的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. 生成水位線的頻率 快/慢 各有優缺 * } */
Flink WaterMark 的瞭解 (更新)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.