日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

零基础学Flink:Window Watermark

發布時間:2023/12/14 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 零基础学Flink:Window Watermark 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在上一篇?文章?中,我們學習了flink的時間。 本文我們來一起研究下 window 和 watermark 。

Window

首先,window是無界流數據處理的關鍵,flink將無界流拆分成無數個window。并對其生命周期進行了定義:

In a nutshell, a window is?created?as soon as the first element that should belong to this window arrives, and the window is?completely removed?when the time (event or processing time) passes its end timestamp plus the user-specified?allowed lateness?(see?Allowed Lateness).?

一個窗口會在屬于其的第一個元素進入的時被創建,當時間(事件時間或處理時間)超過其結束時間加上用戶允許的延遲時間后,該窗口被移除。

在flink官方將窗口分為滾動窗口(Tumbling Windows),滑動窗口(Sliding?Windows),會話窗口(Session?Windows),全局窗口(Global?Windows)。全局窗口是一種特殊類型的窗口,不在今天咱們討論的范圍之內。

滾動窗口:滾動窗口分派器(assigner)會將數據元素分派給指定大小的窗口,滾動窗口尺寸固定,相互不會重疊。

滑動窗口:滑動窗口分派器將元素分派給固定長度的窗口。與滾動窗口分派器類似,窗口大小可由參數配置。還有另外一個參數控制滑動窗口的啟動頻率。因此,如果滑動窗口小于窗口大小,則滑動窗口可以重疊。在這種情況下,元素被分配到多個窗口。如果滑動窗口大于窗口大小,則窗口變成抽樣數據。

會話窗口:會話窗口分派器按活動會話對元素進行分組。與滾動窗口和滑動窗口相比,會話窗口不重疊,也沒有固定的開始和結束時間。當會話窗口在一段時間內不接收元素時(即,當出現不活動間隙時),它將關閉。

下圖,是我認為描述窗口最為清晰的一張了。

這張圖,需要從下往上看,最下面定義了原始數據的輸入流,即在第一分鐘進入2個數據96,第二分鐘進入848,以此類推。

倒數第二行,是一個固定時間的滾動窗口,其窗口大小為1分鐘。

倒數第三行,是一個滑動窗口,需要數據滑動窗口的窗口尺寸和滑動尺寸。

倒數第四行,是一個固定元素個數的滾動窗口,即每3個元素一滾。

最上面則是一個會話窗口,只要會話有間隙,就會重新構建窗口。

Watermark

通過上面一章的內容,我們可以看出每個窗口都會有開始時間結束時間(一般window的時間窗口為左閉右開的區間范圍,在這段時間內,我們是否能拿到所有需要處理的數據,我們就需要watermark來配合了,在之前的文章里,由于理解的原因,我推薦過大家使用翻譯水印,但是現在,我覺得還是叫水位線更合適一些。

這里引用阿里云棲的一段描述

Watermark是Apache Flink為了處理EventTime 窗口計算提出的一種機制,本質上也是一種時間戳,由Apache Flink Source或者自定義的Watermark生成器按照需求Punctuated或者Periodic兩種方式生成的一種系統Event,與普通數據流Event一樣流轉到對應的下游算子,接收到Watermark Event的算子以此不斷調整自己管理的EventTime clock。 Apache Flink 框架保證Watermark單調遞增,算子接收到一個Watermark時候,框架知道不會再有任何小于該Watermark的時間戳的數據元素到來了,所以Watermark可以看做是告訴Apache Flink框架數據流已經處理到什么位置(時間維度)的方式。??Watermark的產生和Apache Flink內部處理邏輯如下圖所示:?

從上文中,我們可以得出兩個觸發watermark的必要條件

  • watermark時間 >=?窗口的結束時間

  • 在窗口的時間范圍(左閉右開)內有數據

  • 那么,flink是如何避免數據亂流的呢?我們來看下面一張圖

    這是一個典型的單通道的場景,首先我們有一個時間事件隊列{2,3,1,7,3,5,9,6,12} ,兩個wartermark(W4,W9)事件通過時間戳被指派給了窗口(T1-T4)。

    數據流入2,3,1進入窗口,7不屬于當前事件窗口,所以指派給了新窗口(T4-T8)。

    數據繼續流入,此時水位線到達W4,觸發窗口(T1-T4)計算。

    數據繼續流入,9被指派給了新窗口(T9-T12)(*筆者注,這個圖的事件窗口不對,個人認為是T8-T12)

    關于多通道的場景,我也推薦云棲的這張圖,比官方文檔里的要好理解一些,配合上面的案例,相信大家也能讀懂。

    現在我們已經了解watermark是如何工作的,那么它是如何產生的呢?在flink里主要有兩種方式產生watermark,即周期性的(Periodic)和標記性的(Punctuated)

    Punctuated:數據流中每一個遞增的EventTime都會產生一個Watermark。?

    Periodic:周期性的(一定時間間隔或者達到一定的記錄條數)產生一個Watermark。在實際的生產中Periodic的方式必須結合時間和積累條數兩個維度繼續周期性產生Watermark,否則在極端情況下會有很大的延時。

    所以Watermark的生成方式需要根據業務場景的不同進行不同的選擇。

    好了,關于 window 和 watermark 就暫時說到這了,僅代表個人理解,如有問題,望指正,歡迎轉載,著名出處。

    后續,會整理一些DEMO與大家分享。

    最后,強烈推薦大家讀一讀云棲的那篇文章,本文也是節選了部分。

    參考資料:

    https://yq.aliyun.com/articles/666056

    https://ci.apache.org/projects/flink/flink-docs-master/dev/stream/operators/windows.html

    https://ci.apache.org/projects/flink/flink-docs-release-1.7/dev/event_timestamps_watermarks.html

    https://blog.csdn.net/u4110122855/article/details/81360381

    總結

    以上是生活随笔為你收集整理的零基础学Flink:Window Watermark的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。