iT邦幫忙

2023 iThome 鐵人賽

DAY 19
1

Flink 是一個分散式的流式計算平台,它可以處理大量的實時數據。為了能夠對數據進行分析和聚合,Flink 提供了一個重要的抽象概念,就是窗格 (windows)。窗格是一個邏輯上的數據分組,它可以根據時間或者其他條件將數據劃分為不同的子集,然後對每個子集進行獨立的處理。窗格可以幫助我們解決流式數據中的一些常見問題,比如如何處理無限的數據流,如何處理時間的不一致性,如何處理有狀態的運算等。

Flink 支持多種類型的窗格,主要可以分為兩大類:時間窗格計數窗格

時間窗格

時間窗格是根據時間來劃分數據的,它可以根據事件時間或者處理時間來定義。事件時間是指數據本身發生的時間,而處理時間是指數據到達 Flink 的時間。如果要用事件時間的話,必須資料源本身要有時間戳 (timestamp)。而處理時間就簡單多了,它即是預設值,而且 Flink 會自動加上這個屬性。

根據時間窗格的長度和間隔,又可以細分為滾動窗格、滑動窗格和會話窗格。每個窗格都可以對裡面的資料做處理,例如 reduce, sum, max 等等常見操作,最極端的情況你也可以對每一個窗格內的元素做特殊單一處理。

滾動窗格 (Tumbling)

滾動窗格是指固定長度且不重疊的窗格,比如每 5 分鐘一個窗格。如果有 30 分鐘的資料的話,總共會產生 30 / 5 = 6 個窗格結果。

滑動窗格 (Sliding)

滑動窗格是指固定長度但有重疊的窗格,比如每 5 分鐘一個窗格,但每 1 分鐘滑動一次。同樣的如果有 30 分鐘的資料,那會產生 26 個窗格結果 (第一個5分鐘一次 + 後面 25 * 1 分鐘 = 1 + 25 次)

會話窗格 (Session)

會話窗格是指根據數據活躍度來劃分的窗格,比如如果兩個事件之間的間隔超過 10 分鐘,就開始一個新的窗格。同樣 30 分鐘的資料,不一定會產生幾次結果,端看裡面的資料間隔多長。

借用官網的圖片會清楚一點:

計數窗格

計數窗格是根據數據的數量來劃分的,它一樣可以根據每個鍵 (key) 或者全局來定義。根據計數窗格的長度和間隔,也可以細分為滾動窗格、滑動窗格和會話窗格。

滾動窗格

滾動窗格是指固定數量且不重疊的窗格,比如每 100 個事件一個窗格。

滑動窗格

滑動窗格是指固定數量但有重疊的窗格,比如每 100 個事件一個窗格,但每 10 個事件滑動一次。

會話窗格

會話窗格是指根據事件之間是否連續來劃分的窗格,比如如果兩個事件之間沒有其他事件發生,就開始一個新的窗格。


上一篇
Flink 介面說明 - Day18
下一篇
Flink key-by - Day20
系列文
用 Airflow & Flink 來開發 ETL 吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言