欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

flink中窗口的作用是什么

這篇文章主要講解了“flink中窗口的作用是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“flink中窗口的作用是什么”吧!

創(chuàng)新互聯建站致力于網站設計制作、網站設計,成都網站設計,集團網站建設等服務標準化,推過標準化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務水平進行質量交付,讓企業(yè)網站從市場競爭中脫穎而出。 選擇創(chuàng)新互聯建站,就選擇了安全、穩(wěn)定、美觀的網站建設服務!

窗口

  • 窗口計算是流式計算中常用的數據計算方式之一,通過按照固定時間或長度將數據流切分成不同的窗口,再對數據進行相應的聚合操作,得到一定時間范圍內的統(tǒng)計結果,例如統(tǒng)計最近5分鐘內某網站的點擊數,此時,點擊數據在不斷產生,通過5分鐘窗口將數據限定在固定時間范圍內,就可以對該范圍內的有界數據執(zhí)行聚合,得到最近5分鐘的網站點擊數。

  • 代碼接口規(guī)則

stream.keyBy(...)  //keyed類型數據集
.window(...)   //指定窗口分配器類型
[.trigger(...)]  //指定觸發(fā)器類型(可選)
[.evictor(...)]  //指定evictor(可選)
[.allowedLateness(...)]  //指定是否延遲處理數據(可選)
[.sideOutputLateData(...)]  //指定Output Lag(可選)
.reduce/aggregate/fold/apply()  //指定窗口計算函數
[.getSideOutput(...)]  //根據Tag輸出數據(可選)
  • 算子

    • Windows Assigner:指定窗口類型,定義如何將數據流分配到一個或多個窗口

    • Windows Trigger:指定窗口觸發(fā)的時機,定義窗口滿足什么樣的條件觸發(fā)計算;

    • Evictor:用于數據剔除

    • Lateness:標記是否處理遲到數據,當遲到數據到達窗口中是否觸發(fā)計算。

    • Output Tag:標記輸出標簽,然后通過getSideOutput將窗口中的數據根據標簽輸出。

    • Windows Function:定義窗口上數據處理的邏輯,例如對數據進行sum操作。

Keyed 和 Non-Keyed窗口

  • 在運用窗口計算時,Flink根據上游數據集是否為KeyedStream類型(將數據集按Key分區(qū)),對應的Window Assigner會不同,

    • 上游數據集為KeyedStream類型,則調用DataStream API的Windwo()方法指定Windows Assigner,數據將根據Key在不同的Task實例中并行分別計算,最后得出針對每個Key統(tǒng)計的結果。

    • 如果是Non-Keyed類型,則調用WindowsAll()方法來指定Windows Assigner,所有數據都被窗口算子路由到一個Task中計算,并得到結果。

  • 建議數據進行KeyedStream處理,這樣啟動并行計算,加速效率。

Window Assigner

  • flink支持兩種類型的窗口,一種基于時間,窗口大小由開始和結束時間戳約束,一種基于數量,根據固定數量定義窗口大小。

  • 根據Windows Assigner數據分配方式的不同將Windows分為4大類:滾動窗口(Tumbling Windows)、滑動窗口(Sliding Windows)、會話窗口(Session Windows)和全局窗口(Global Windows)

滾動窗口

  • 滾動窗口根據固定時間或大小切分,且窗口與窗口間元素互不重疊,適合于固定時間大小和周期統(tǒng)計某一指標的窗口計算。

  • DataStream API提供了基于Event Time和Process Time兩種時間類型的Tumbling窗口,對應的Assigner分別為TumblingEventTimeWindows和TumblingProcessTimeWindows,窗口大小童工of()指定,時間單位分別為Time.milliseconds(x)、Time.seconds(x)或Time.minutes(x),也可以是不同時間單位的組合。

  • 如下實例,窗口時間按10S進行切分,窗口的時間是[1:00:00.000-1:00:09.999] 到[1:00:10.000-1:00:19.999]的等固定時間范圍。

val inputStream:DataStream[T]= ...
//定義Event Time Tumbling Windows
val tumblingEventTimeWindows=inputStream.keyBy(_.id)
//通過使用TumblingEventTimeWindows定義Event Time滾動窗口
.window(TumblingEventTimeWindows.of(Time.seconds(10)))
.process(...)  //定義窗口函數

//定義Process Time Tumbling Windows
val tumblingProcessingTimeWindows = inputStream.keyBy(_.id)
//通過TumblingProcessTimeWindows定義Evnet Time滾動窗口
.window(TumblingProcessTimeWindows.of(Times.seconds(10)))
.process(...)  //定義窗口函數

滑動窗口

  • 滑動窗口是一種常見的窗口類型,特點是在滾動窗口基礎上增加了窗口滑動時間(Slide Time),且允許窗口數據發(fā)生重疊。這種窗口不像滾動窗口按照Windows Size向前移動,而是根據設定的Slide Time向前滑動。窗口之間的數據重疊大小根據Windows Size和Slide time決定,當Slide Time小于Windows Size便會發(fā)生窗口重疊,Slide Size大于WindowsSize會出現窗口不連續(xù),數據可能不會再任何一個窗口內計算。

  • DataStream API針對Sliding Windows根據不同時間類型Assigner,包括基于Event Time的SlidingEventTimeWindows和基于Process Time的SlidingProcessingTimeWindows。

  • 實例如下,指定Windows Size為1h,Slide Time為10m。

val inputStream:DataStream[T]= ...
//定義Event Time Sliding Windows
val slidingEventTimeWindows=inputStream.keyBy(_.id)
//通過使用SlidingEventTimeWindows定義Event Time滾動窗口
.window(SlidingEventTimeWindows.of(Time.hours(1),Time.minutes(10)))
.process(...)  //定義窗口函數

//定義Process Time Sliding Windows
val slidingProcessTimeWindows = inputStream.keyBy(_.id)
//通過SlidingProcessTimeWindows定義Evnet Time滾動窗口
.window(SlidingProcessTimeWindows.of(Time.hours(1),Time.minutes(10)))
.process(...)  //定義窗口函數

會話窗口

  • 將某個時間段內活躍較高的數據聚合為一個窗口進行計算,窗口的觸發(fā)條件為Session Gap,指規(guī)定時間內沒有數據活躍接入,則任務窗口結束,觸發(fā)窗口計算。

  • 注意:如果數據一直不間斷,會導致窗口始終不觸發(fā)。

  • 與滑動、滾動窗口不同,Session Windows不需要定義Windows Size和Slide Time,只需要定義session gap,規(guī)定不活躍數據的時間上線即可。

  • Session Windows比較適合非連續(xù)型數據處理或周期性產生數據的場景。DataStream API中可以創(chuàng)建基于Event Time和Process Time的Session Windows,對應的有Assigner分別為EventTimeSessionWindow和ProcessTimerSessionWindows。

  • 實例代碼如下:

val inputStream:DataStream[T]= ...
//定義Event Time Session Windows
val eventTimeSessionWindows=inputStream.keyBy(_.id)
//通過使用EventTimeSessionWindows定義Event Time滾動窗口
.window(EventTimeSessionWindows.withGap(Time.milliseconds(10)))
.process(...)  //定義窗口函數

//定義Process Time Session Windows
val processTimeSessionWindows = inputStream.keyBy(_.id)
//通過ProcessTimeSessionWindows定義Evnet Time滾動窗口
.window(ProcessTimeSessionWindows.withGap(Time.milliseconds(10)))
.process(...)  //定義窗口函數
  • flink支持動態(tài)調整的Session Gap,需要實現SessionWindowTimeGapExtractor接口,并復寫extract方法,完成Session Gap的抽取,然后將創(chuàng)建好的Session Gap抽取器傳入ProcessiongTimeSessionWindows.withDynamicGap()方法即可。

val inputStream:DataStream[T]= ...
//定義Event Time Session Windows
val eventTimeSessionWindows=inputStream.keyBy(_.id)
//通過使用EventTimeSessionWindows定義Event Time滾動窗口
.window(EventTimeSessionWindows.withDynamicGap(

    //實例化SessionWindowTimeGapExtractor接口
    new SessionWindowTimeGapExtractor[String]{
        override def extract(element:String):Long={
            //動態(tài)指定并返回Session Gap
        }
    }
))
.process(...)  //定義窗口函數

//定義Process Time Session Windows
val processTimeSessionWindows = inputStream.keyBy(_.id)
//通過ProcessTimeSessionWindows定義Evnet Time滾動窗口
.window(ProcessTimeSessionWindows.withDynamicGap(

    //實例化SessionWindowTimeGapExtractor接口
    new SessionWindowTimeGapExtractor[String]{
        override def extract(element:String):Long={
            //動態(tài)指定并返回Session Gap
        }
    }
))
.process(...)  //定義窗口函數

全局窗口

  • 全局會話窗口將所有相同的key數據分配到單個窗口中計算,窗口沒有起始和結束時間,窗口需要借助Triger觸發(fā)計算,如果不指定,則不會觸發(fā)計算。

  • 使用全局窗口要非常謹慎,必須明確自己在整個窗口中統(tǒng)計出的結果是什么,并指定對應的觸發(fā)器,同時指定相應的數據清理機制,否則數據將一直留在內存中。

val inputStream:DataStream[T]= ...
val globalWindows = inputStream.keyBy(_.id)
.window(GlobalWindows.create())  //通過GlobalWindows定義Global Windows
.process()

總結

  • flink定義的四種窗口,容易和時間窗口和事件窗口混淆,他們是不同維度的的窗口定義,需要特別注意下。

  • 越長大越孤單,珍惜好身邊人。

感謝各位的閱讀,以上就是“flink中窗口的作用是什么”的內容了,經過本文的學習后,相信大家對flink中窗口的作用是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯,小編將為大家推送更多相關知識點的文章,歡迎關注!

分享名稱:flink中窗口的作用是什么
地址分享:http://aaarwkj.com/article44/phoshe.html

成都網站建設公司_創(chuàng)新互聯,為您提供網站改版、關鍵詞優(yōu)化、網站維護、企業(yè)網站制作網站導航、定制開發(fā)

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

成都seo排名網站優(yōu)化
快播av手机在线播放| 日韩av一区二区在线| 亚洲高清精品一区二区| 日韩暴露一区二区三区| 日韩二区三区在线观看| 国产高清av免费在线播放| 国产偷人伦激情在线观看| 我的极品小姨在线观看| 伊人久久亚洲福利精品| 欧美三级在线完整版免费| 男人午夜激情免费网站| 欧美日韩精品激情一区二区| 91嫩草中文字幕在线| 国产一级内射麻豆91| 国产福利午夜一区二区| 色婷婷精品二区久久蜜臀av | 日韩成人高清免费在线| 国产亚洲男人av一区三区| 国产欧美一区二区三区高清| 激情内射日本一区二区三区| 国产精品国产精品国产| 国产精品国产亚洲av| 国产在线精品专区第一页| 国产av自拍在线免费观看| 精品亚洲天堂一区二区三区| 熟女肥臀一区二区三区| 亚洲欧美日韩国产精品专区| 国产在线精品不卡一区| 无遮挡动漫网站免费观看| 99热视频在线观看免费| 日本黄色一区二区三区四区| 国产亚洲欧美日韩各类| 久久精品一区二区婷婷| 蜜臀av免费在线观看| 四影虎影永久免费观看 | 久久精品中文字幕人妻| 欧美大片免费久久精品| 亚洲国产日韩一区二区在线| 国产精品伦一区二区三级| 欧美在线观看香蕉视频| 粉嫩欧美一区二区三区|