溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Flink1.10中Window窗口機(jī)制簡(jiǎn)介

發(fā)布時(shí)間:2021-11-22 17:33:36 來源:億速云 閱讀:124 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了Flink1.10中Window窗口機(jī)制簡(jiǎn)介,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

一、Window概念

Flink1.10中Window窗口機(jī)制簡(jiǎn)介

   

    上面是Flink1.10的官方文檔的一句話,翻譯了一下大體意思是:Window是處理無限數(shù)據(jù)流的核心,Windows將流分割為有限大小的“buckets”,我們可以在上面應(yīng)用計(jì)算。

   Flink認(rèn)為批處理是流處理的一種非常特殊的情況。在流處理中,我們?yōu)閿?shù)據(jù)定義滑動(dòng)窗口或滾動(dòng)窗口,并且在每次窗口滑動(dòng)或滾動(dòng)時(shí)生成結(jié)果。批處理則不同,我們定義一個(gè)全局窗口,所有的記錄都屬于同一個(gè)窗口;Flink 底層引擎是一個(gè)流式引擎,在上面實(shí)現(xiàn)了流處理和批處理。而窗口(window)就是從 Streaming 到 Batch 的一個(gè)橋梁。

二、Window分類

 

1.keyed streams和non-keyed streams

   Flink程序在窗口計(jì)算之前,先對(duì)數(shù)據(jù)做分流,有兩種控制流的方式:第一種是keyed streams;第二種non-keyed streams;

Flink1.10中Window窗口機(jī)制簡(jiǎn)介

    由上圖可知,對(duì)于keyed streams調(diào)用的是keyBy和window,先對(duì)數(shù)據(jù)流根據(jù)key進(jìn)行了分組,經(jīng)過keyBy的數(shù)據(jù)流將形成多組數(shù)據(jù),下游的算子的多個(gè)實(shí)例可以并行計(jì)算,而non-keyed streams調(diào)用的是windowAll,不會(huì)對(duì)數(shù)據(jù)流進(jìn)行分組,所有的數(shù)據(jù)將發(fā)送到下游的單個(gè)實(shí)例進(jìn)行處理。兩種控制流的原理基本類似,唯一的區(qū)別就是發(fā)送給下游的多個(gè)或單個(gè)算子進(jìn)行計(jì)算。

2.Window Assinger

    數(shù)據(jù)經(jīng)過控制流的處理之后,兩種控制流都需要指定一個(gè)window Assinger,負(fù)責(zé)將每個(gè)傳入的元素分配給一個(gè)或多個(gè)窗口,有了window Assinger,才會(huì)創(chuàng)建出各種形式的window來覆蓋我們所需的各種場(chǎng)景,對(duì)我們開發(fā)來說不需要關(guān)注window本身,只需要關(guān)注Window Assinger的分類即可,所以很多關(guān)于Flink的視頻都沒有講解控制流的概念,只講了Window的分類。

3.Window Assinger分類

    Flink為最常見的用例(即滾動(dòng)窗口、滑動(dòng)窗口、會(huì)話窗口和全局窗口)提供了預(yù)定義的Window Assinger程序。您還可以通過擴(kuò)展Window Assigner類來實(shí)現(xiàn)自定義窗口assigner。所有內(nèi)置的窗口分配程序(全局窗口除外)都根據(jù)時(shí)間將元素分配給窗口,時(shí)間可以是處理時(shí)間,也可以是事件時(shí)間。

    Window 可以是基于時(shí)間驅(qū)動(dòng)的(Time Window,例如:每60秒鐘),也可以是基于數(shù)據(jù)驅(qū)動(dòng)的(Count Window,例如:每200個(gè)元素)。同時(shí)基于不同事件驅(qū)動(dòng)的窗口又可以分成以下幾類:滾動(dòng)窗口 (Tumbling Window, 無重疊)、滑動(dòng)窗口 (Sliding Window, 有重疊)、會(huì)話窗口 (Session Window, 活動(dòng)間隙)、全局窗口。下面我就結(jié)合ApacheFlink官網(wǎng)文檔給大家講解下這四種窗口。

3.1 Tumbling Window(滾動(dòng)窗口)

    滾動(dòng)窗口將每個(gè)元素分配給指定窗口大小的窗口。滾動(dòng)窗口有一個(gè)固定的大小且元素不重疊。例如,如果您指定了一個(gè)大小為5分鐘的滾動(dòng)窗口,那么將計(jì)算當(dāng)前窗口并每5分鐘啟動(dòng)一個(gè)新窗口,如下圖所示。

Flink1.10中Window窗口機(jī)制簡(jiǎn)介

3.2 Sliding Windows(滑動(dòng)窗口)

    滑動(dòng)窗口分配程序?qū)⒃胤峙浣o固定長(zhǎng)度的窗口。類似于滾動(dòng)窗口分配程序,窗口的大小由窗口大小參數(shù)配置。一個(gè)附加的窗口滑動(dòng)參數(shù)控制滑動(dòng)窗口啟動(dòng)的頻率。因此,如果滑動(dòng)窗口比窗口大小要小,則滑動(dòng)窗口可以重疊。在這種情況下,元素被分配給多個(gè)窗口。例如,您可以有10分鐘大小的窗口,它可以滑動(dòng)5分鐘。這樣,您每5分鐘就會(huì)得到一個(gè)包含最近10分鐘內(nèi)到達(dá)的事件的窗口,如下圖所示。

Flink1.10中Window窗口機(jī)制簡(jiǎn)介

3.3 Session Windows(會(huì)話窗口)

    會(huì)話窗口分配程序根據(jù)活動(dòng)的會(huì)話對(duì)元素進(jìn)行分組。與滾動(dòng)窗口和滑動(dòng)窗口相比,會(huì)話窗口沒有重疊,也沒有固定的開始和結(jié)束時(shí)間。相反,當(dāng)某個(gè)會(huì)話窗口在一段時(shí)間內(nèi)沒有接收到元素時(shí),它就會(huì)關(guān)閉。當(dāng)一個(gè)不活躍的間隙出現(xiàn)時(shí)。會(huì)話窗口分配程序可以配置為靜態(tài)會(huì)話間隔,也可以配置為會(huì)話間隔提取器函數(shù),該函數(shù)定義了不活動(dòng)期間的長(zhǎng)度。當(dāng)此期間過期時(shí),當(dāng)前會(huì)話將關(guān)閉,隨后的元素將分配給新會(huì)話窗口,如下圖所示:

Flink1.10中Window窗口機(jī)制簡(jiǎn)介

3.4 Global Windows(全局窗口)

    全局窗口分配程序?qū)⒕哂邢嗤I的所有元素分配給同一個(gè)全局窗口。此窗口模式僅在您還指定自定義觸發(fā)器時(shí)才有用。否則,將不執(zhí)行任何計(jì)算,因?yàn)槿执翱跊]有一個(gè)可以處理聚合元素的自然末端,所有相同keyed的元素分配到一個(gè)窗口里,這種窗口很少使用,如下圖所示:

Flink1.10中Window窗口機(jī)制簡(jiǎn)介

    至此,F(xiàn)link的Window機(jī)制的一些概念介紹完畢。

上述內(nèi)容就是Flink1.10中Window窗口機(jī)制簡(jiǎn)介,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI