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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

2021年大数据Flink(十八):Flink Window操作

發(fā)布時間:2023/11/28 生活经验 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021年大数据Flink(十八):Flink Window操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

為什么需要Window

Window的分類

按照time和count分類

???????按照slide和size分類

???????總結

Window的API

window和windowAll

???????WindowAssigner

???????evictor--了解

???????trigger--了解

API調用示例


Flink-Window操作

為什么需要Window

在流處理應用中,數(shù)據(jù)是連續(xù)不斷的,有時我們需要做一些聚合類的處理,例如:在過去的1分鐘內有多少用戶點擊了我們的網(wǎng)頁。

在這種情況下,我們必須定義一個窗口(window),用來收集最近1分鐘內的數(shù)據(jù),并對這個窗口內的數(shù)據(jù)進行計算。

?

?

?

Window的分類

按照time和count分類

time-window:時間窗口:根據(jù)時間劃分窗口,如:每xx分鐘統(tǒng)計最近xx分鐘的數(shù)據(jù)

count-window:數(shù)量窗口:根據(jù)數(shù)量劃分窗口,如:每xx個數(shù)據(jù)統(tǒng)計最近xx個數(shù)據(jù)

?

?

???????按照slide和size分類

窗口有兩個重要的屬性: 窗口大小size和滑動間隔slide,根據(jù)它們的大小關系可分為:

tumbling-window:滾動窗口:size=slide,如:每隔10s統(tǒng)計最近10s的數(shù)據(jù)

?

sliding-window:滑動窗口:size>slide,如:每隔5s統(tǒng)計最近10s的數(shù)據(jù)

?

注意:當size<slide的時候,如每隔15s統(tǒng)計最近10s的數(shù)據(jù),那么中間5s的數(shù)據(jù)會丟失,所有開發(fā)中不用

???????總結

按照上面窗口的分類方式進行組合,可以得出如下的窗口:

1.基于時間的滾動窗口tumbling-time-window--用的較多

2.基于時間的滑動窗口sliding-time-window--用的較多

3.基于數(shù)量的滾動窗口tumbling-count-window--用的較少

4.基于數(shù)量的滑動窗口sliding-count-window--用的較少

注意:Flink還支持一個特殊的窗口:Session會話窗口,需要設置一個會話超時時間,如30s,則表示30s內沒有數(shù)據(jù)到來,則觸發(fā)上個窗口的計算

?

Window的API

window和windowAll

?

?

n使用keyby的流,應該使用window方法

n未使用keyby的流,應該調用windowAll方法

???????WindowAssigner

window/windowAll?方法接收的輸入是一個 WindowAssigner, WindowAssigner 負責將每條輸入的數(shù)據(jù)分發(fā)到正確的 window 中,

Flink提供了很多各種場景用的WindowAssigner:

?

如果需要自己定制數(shù)據(jù)分發(fā)策略,則可以實現(xiàn)一個 class,繼承自 WindowAssigner。

?

???????evictor--了解

evictor 主要用于做一些數(shù)據(jù)的自定義操作,可以在執(zhí)行用戶代碼之前,也可以在執(zhí)行

用戶代碼之后,更詳細的描述可以參考org.apache.flink.streaming.api.windowing.evictors.Evictor 的 evicBefore 和 evicAfter兩個方法。

Flink 提供了如下三種通用的 evictor:

* CountEvictor 保留指定數(shù)量的元素

* TimeEvictor 設定一個閾值 interval,刪除所有不再 max_ts - interval 范圍內的元

素,其中 max_ts 是窗口內時間戳的最大值。

* DeltaEvictor 通過執(zhí)行用戶給定的 DeltaFunction 以及預設的 theshold,判斷是否刪

除一個元素。

?

???????trigger--了解

trigger 用來判斷一個窗口是否需要被觸發(fā),每個 WindowAssigner 都自帶一個默認的trigger,

如果默認的 trigger 不能滿足你的需求,則可以自定義一個類,繼承自Trigger 即可,我們詳細描述下 Trigger 的接口以及含義:

* onElement() 每次往 window 增加一個元素的時候都會觸發(fā)

* onEventTime() 當 event-time timer 被觸發(fā)的時候會調用

* onProcessingTime() 當 processing-time timer 被觸發(fā)的時候會調用

* onMerge() 對兩個 `rigger 的 state 進行 merge 操作

* clear() window 銷毀的時候被調用

上面的接口中前三個會返回一個 TriggerResult, TriggerResult 有如下幾種可能的選

擇:

* CONTINUE 不做任何事情

* FIRE 觸發(fā) window

* PURGE 清空整個 window 的元素并銷毀窗口

* FIRE_AND_PURGE 觸發(fā)窗口,然后銷毀窗口

?

API調用示例

?

source.keyBy(0).window(TumblingProcessingTimeWindows.of(Time.seconds(5)));

source.keyBy(0)..timeWindow(Time.seconds(5))

總結

以上是生活随笔為你收集整理的2021年大数据Flink(十八):Flink Window操作的全部內容,希望文章能夠幫你解決所遇到的問題。

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