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