去掉窗口_Flink 基础——窗口(Window)理论篇
窗口是什么
要知道 Flink 面對的是無限的數據流,而批處理只是流處理的一個特例,然而我們的計算只能基于一個有限的集合,這個時候窗口正好定義了這其中的概念。因此可以說了解窗口機制是學習 Flink 的基礎也是關鍵。
總結來說,窗口將一個無限數據流拆分成有限的數據集合(以下簡稱為“桶”),并使得我們很方便地在上面做一些操作。那么顯然這里帶來兩個問題:
在 Flink 的實現中,會有具體的策略決定何時創建一個桶,數據該分配到哪個桶,而后續的操作是基于條件觸發的,當然這個條件是可以自定義的,Flink 內部也有默認的實現,一旦條件達到,后續的操作就會發生,將桶內的數據發送給操作函數。這便是窗口在整個過程中起到的作用。
圍繞窗口有哪些概念需要掌握
窗口類型
接著上面的討論,Flink 會有具體的策略決定何時創建桶以及數據該分配到哪個桶,那么有哪些策略呢?這些策略在 Flink 中的區分就是窗口的類型:
- 滾動窗口
- 滑動窗口
- 會話窗口
這些窗口具體什么時候會用到呢?比如我們要計算每隔5分鐘的車流量,那就需要滾動窗口,每5分鐘累計一次。但是如果希望每分鐘計算一下最近5分鐘的車流量呢,那就需要滑動窗口,滑動的大小為1分鐘。而如果要統計用戶在一次網頁交互的會話內點擊頁面的次數,那么這個時候就需要用會話窗口了。當然了,如果這幾個內置的窗口不夠用的話,還可以自定義。
觸發器(Trigger)
桶已經創建好了,數據也已經分配到具體的桶了,那么何時觸發后續的操作函數呢?這個在 Flink 由觸發器來規定。觸發器會決定一個窗口何時被計算或清除(即清除窗口中的元素)。因而每個窗口都會有一個觸發器。再接著舉上面的例子說吧,如果要5分鐘統計一次的話,那么顯然需要計時,每隔5分鐘就觸發一次。Flink 內部已經對常用的窗口實現了默認的觸發器,如果不滿足的話也可以使用相應的 API 來自定義。
驅逐者(Evitor)
驅逐者其實有點像個過濾器,用于在上面的觸發器觸發之后,去掉窗口中的某些元素。對于窗口而言,驅逐者是個可選項。在 Flink 內部提供的滑動計數窗口的實現中,就用到了驅逐者,用來去掉多余的數據。
允許延遲
在實際的數據產生到處理的過程中,出現數據的延遲再正常不過了,那么我們怎么讓遲到的數據加入到窗口中呢?在 Flink 中提供了允許延遲的 API,只要數據還沒有到窗口的最后時間加上延遲時間,那么依然會被加入到窗口中,而且有可能再次觸發后續的操作函數,這取決于具體的觸發器的實現。
小結
對于窗口相關的理論知識,掌握這些基本就夠了,接下來需要從 API 的使用去了解了,后續文章就開始相關 API 的介紹。
本文首發于公眾號“數據Man”,歡迎關注!
數據Man總結
以上是生活随笔為你收集整理的去掉窗口_Flink 基础——窗口(Window)理论篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑手机wifi互传文件_安卓手机文件互
- 下一篇: 三国杀服务器改名 插图修改,《三国杀》大