在 Streaming data 的處理上,因為數據是連續不斷的,我們不可能等到所有數據都到了才開始處理,我們可以每來一個消息就處理一次,像是一些聚合 (aggregation) 的處理。舉個例子:在過去的 1 分鐘內有多少用戶點擊了我們的網頁。在這種情況下,我們必須定義一個窗格 (window),用來收集最近一分鐘內的數據,並對這個窗格內的數據進行計算。

窗格可以是時間驅動的 (Time Window,例如:每30秒鐘一個窗格),也可以是數據驅動的 (Count Window,例如:每一百個事件一個窗格)。這些窗格分類普遍可以分成:Tumbling Window (無重疊),Sliding Window (有重疊),和Session Window (有間隙)。

下面這張表格定義 Data windowing: Chopping data along temporal boundaries into finite blocks for processing. (將數據沿時間邊界切割成有限塊以進行處理,英文很難懂,也說得很籠統)

下面用例子來解釋幾種 windowing 方法,假設不同時間點有不同數量的 Stream data。

Fixed (Tumbling): 用固定的時間邊界 (temporal boundaries),把這些 Stream data 切成好幾塊 Block。如上圖藍色線部分。
Sliding: 滑動時間範圍,Block 和事件有固定的 length 和 period,且每個時間範圍都至少會有一個事件,如果 period (temporal boundaries) < length (window size),window 就會重疊 (overlap),如上圖上面那一條綠線;如果 period = length 就會和 Fixed 一樣。
Session: 會將相近時間的 stream data 分組,並把沒有任何數據的時間範圍篩掉,如上圖橘色線部分。