大資料基礎 Flink 視窗模型

2022-01-14 08:51:23 字數 2254 閱讀 6883

在大多數場景下,我們需要統計的資料流都是無界的,因此我們無法等待整個資料流終止後才進行統計。通常情況下,我們只需要對某個時間範圍或者數量範圍內的資料進行統計分析:如每隔五分鐘統計一次過去一小時內所有商品的點選量;或者每發生1000次點選後,都去統計一下每個商品點選率的佔比。在 flink 中,我們使用視窗 (window) 來實現這類功能。按照統計維度的不同,flink 中的視窗可以分為 時間視窗 (time windows) 和 計數視窗 (count windows) 。

time windows 用於以時間為維度來進行資料聚合,具體分為以下四類:

滾動視窗 (tumbling windows) 是指彼此之間沒有重疊的視窗。例如:每隔1小時統計過去1小時內的商品點選量,那麼 1 天就只能分為 24 個視窗,每個視窗彼此之間是不存在重疊的,具體如下:

這裡我們以詞頻統計為例,給出乙個具體的用例,**如下:

final streamexecutionenvironment env = streamexecutionenvironment.getexecutionenvironment();

// 接收socket上的資料輸入

datastreamsourcestreamsource = env.sockettextstream("hadoop001", 9999, "\n", 3);

streamsource.flatmap(new flatmapfunction>()

}}).keyby(0).timewindow(time.seconds(3)).sum(1).print(); //每隔3秒統計一次每個單詞出現的數量

env.execute("flink streaming");

測試結果如下:

滑動視窗用於滾動進行聚合分析,例如:每隔 6 分鐘統計一次過去一小時內所有商品的點選量,那麼統計視窗彼此之間就是存在重疊的,即 1天可以分為 240 個視窗。圖示如下:

可以看到 window 1 - 4 這四個視窗彼此之間都存在著時間相等的重疊部分。想要實現滑動視窗,只需要在使用 timewindow 方法時額外傳遞第二個引數作為滾動時間即可,具體如下:

// 每隔3秒統計一次過去1分鐘內的資料

timewindow(time.minutes(1),time.seconds(3))

當使用者在進行持續瀏覽時,可能每時每刻都會有點選資料,例如在活動區間內,使用者可能頻繁的將某類商品加入和移除購物車,而你只想知道使用者本次瀏覽最終的購物車情況,此時就可以在使用者持有的會話結束後再進行統計。想要實現這類統計,可以通過 session windows 來進行實現。

具體的實現**如下:

// 以處理時間為衡量標準,如果10秒內沒有任何資料輸入,就認為會話已經關閉,此時觸發統計

window(processingtimesessionwindows.withgap(time.seconds(10)))

// 以事件時間為衡量標準

window(eventtimesessionwindows.withgap(time.seconds(10)))

最後乙個視窗是全域性視窗, 全域性視窗會將所有 key 相同的元素分配到同乙個視窗中,其通常配合觸發器 (trigger) 進行使用。如果沒有相應觸發器,則計算將不會被執行。

這裡繼續以上面詞頻統計的案例為例,示例**如下:

// 當單詞累計出現的次數每達到10次時,則觸發計算,計算整個視窗內該單詞出現的總數

window(globalwindows.create()).trigger(counttrigger.of(10)).sum(1).print();

count windows 用於以數量為維度來進行資料聚合,同樣也分為滾動視窗和滑動視窗,實現方式也和時間視窗完全一致,只是呼叫的 api 不同,具體如下:

// 滾動計數視窗,每1000次點選則計算一次

countwindow(1000)

// 滑動計數視窗,每10次點選發生後,則計算過去1000次點選的情況

countwindow(1000,10)

public windowedstreamcountwindow(long size) 

public windowedstreamcountwindow(long size, long slide)

flink windows:

系列傳送門

大資料技術 Flink

它既能保證資料一致性 exactly once 又能實時快速的處理海量資料。與生俱來的 watermark 功能讓它能對複雜資料亂序場景應對自如,它充分體現了 批 流 一體的完美結合同時又代表著 流 表 二象性的和諧統一。兩種資料集 無邊界資料集 連續不斷追加 和有邊界資料集 兩種執行模式 流式傳輸...

大資料 Flink部落 1

大資料兩個主要的儲存系統 hdfs和hbase 批處理比較熱門的大資料框架是hadoop和spark hadoop和spark的最基本的區別 hadoophe spark 這二者都是大資料框架,即便如此二者各自存在的目的是不同的。hadoop是乙個分布式的資料基礎設施,它是將龐大的資料集分派到由若干...

大資料分析基礎 維度模型

1基本概念 維度模型的概念出自於資料倉儲領域,是資料倉儲建設中的一種資料建模方法。維度模型主要由事實表和維度表這兩個基本要素構成。1.1維度 維度是度量的環境,用來反映業務的一類屬性 這類屬性的集合構成乙個維度 也可以稱為實體物件。維度屬於乙個資料域,如地理維度 其中包括國家 地區 省以及城市等級別...