1. 程式人生 > >Apache Flink - Window

Apache Flink - Window

cdn 清除 依賴 sign 網頁 開始 組件 自己 str

Window:

  • 在Streaming中,數據是無限且連續的,我們不可能等所有數據都到才進行處理,我們可以來一個就處理一下,但是有時我們需要做一些聚合類的處理,例如:在過去的1分鐘內有多少用戶點擊了我們的網頁。在這種情況下,我們必須定義一個窗口,用來收集最近一分鐘內的數據,並對這個窗口內的數據進行計算。
  • 窗口可以是時間和事件驅動的,窗口有翻滾窗口(Tumbling Window,無重疊),滾動窗口(Sliding Window,有重疊),和會話窗口(Session Window,活動間隙)。技術分享圖片raw data stream 代表用戶的購買行為流,圈中的數字代表該用戶本次購買的商品個數,事件是按時間分布的,且事件之間是有時間間隙。

Window API

  • Window Assigner:用來決定某個元素被分配到哪個/哪些窗口中去。
  • Trigger:觸發器。決定了一個窗口何時能夠被計算或清除,每個窗口都會擁有一個自己的Trigger。
  • Evictor:可以譯為“驅逐者”。在Trigger觸發之後,在窗口被處理之前,Evictor(如果有Evictor的話)會用來剔除窗口中不需要的元素,相當於一個filter。

Window 的實現

  • 下圖描述了 Flink 的窗口機制以及各組件之間是如何相互工作的。技術分享圖片 首先上圖中的組件都位於一個算子(window operator)中,數據流源源不斷地進入算子,每一個到達的元素都會被交給 WindowAssigner。WindowAssigner 會決定元素被放到哪個或哪些窗口(window),可能會創建新窗口。因為一個元素可以被放入多個窗口中,所以同時存在多個窗口是可能的。註意,Window
    本身只是一個ID標識符,其內部可能存儲了一些元數據,如TimeWindow中有開始和結束時間,但是並不會存儲窗口中的元素。窗口中的元素實際存儲在 Key/Value State 中,key為Window,value為元素集合(或聚合值)。為了保證窗口的容錯性,該實現依賴了 Flink 的 State 機制。

Apache Flink - Window