Flink的滾動視窗、會話視窗、滑動視窗及其應用
當我們需要在時間視窗維度上對資料進行聚合時,視窗是流處理應用中經常需要解決的問題。Flink的視窗運算元為我們提供了方便易用的API,我們可以將資料流切分成一個個視窗,對視窗內的資料進行處理
視窗主要有兩種,一種基於時間(Time-based Window),一種基於數量(Count-based Window)。本文主要討論Time-based Window,在Flink原始碼中,用TimeWindow
表示。每個TimeWindow
都有一個開始時間和結束時間,表示一個左閉右開的時間段。Flink為我們提供了一些內建的WindowAssigner,即滾動視窗、滑動視窗和會話視窗
滾動視窗
滾動視窗模式下視窗之間不重疊,且視窗長度(Size)是固定的。我們可以用TumblingEventTimeWindows
和TumblingProcessingTimeWindows
建立一個基於Event Time或Processing Time的滾動時間視窗。視窗的長度可以用org.apache.flink.streaming.api.windowing.time.Time
中的seconds
、minutes
、hours
和days
來設定。
滑動視窗
滑動視窗以一個步長(Slide)不斷向前滑動,視窗的長度固定。使用時,我們要設定Slide和Size。Slide的大小決定了Flink以多快的速度來建立新的視窗,Slide較小,視窗的個數會很多。Slide小於視窗的Size時,相鄰視窗會重疊,一個元素會被分配到多個視窗;Slide大於Size,有些元素可能被丟掉。
會話視窗
會話視窗模式下,兩個視窗之間有一個間隙,被稱為Session Gap。當一個視窗在大於Session Gap的時間內沒有接收到新資料時,視窗將關閉。在這種模式下,視窗的長度是可變的,每個視窗的開始和結束時間並不是確定的。我們可以設定定長的Session Gap,也可以使用SessionWindowTimeGapExtractor
動態地確定Session Gap的長度。
相關文章
- mysql視窗函式中的滑動視窗MySql函式
- Sentinel 原理-滑動視窗
- 滑動視窗專題
- 細聊滑動視窗
- 滑動視窗演算法演算法
- 滑動視窗的最大值
- 滑動視窗問題總結
- 滑動視窗與雙指標指標
- 滑動視窗法——Leetcode例題LeetCode
- 滑動視窗演算法思路演算法
- TCP 流量控制-滑動視窗TCP
- WeetCode2滑動視窗系列
- Sentinel滑動視窗演算法演算法
- 自己實現一個滑動視窗
- 滑動視窗(Sliding Window)技巧總結
- 「LeetCode Top100」之滑動視窗LeetCode
- 239. 滑動視窗最大值
- 滑動視窗最大值問題
- 力扣刷題-滑動視窗(字串)力扣字串
- 滑動視窗的最大值問題
- TCP的滑動視窗和擁塞控制TCP
- LeetCode 239. 滑動視窗最大值LeetCode
- 滑動視窗演算法(Sliding Window Algorithm)演算法Go
- [Python手撕]滑動視窗最大值Python
- 滑動視窗最大值的golang實現Golang
- JZ-064-滑動視窗的最大值
- 滑動視窗相關的題目總結
- JavaScript 視窗抖動效果JavaScript
- 滑動視窗(Sliding Window)演算法介紹演算法
- 滑動視窗最大值——棧與佇列佇列
- 滑動視窗法——子串相關問題
- Hive實戰—時間滑動視窗計算Hive
- 【演算法】滑動視窗三步走演算法
- 對滑動視窗單調性的一點思考
- 劍指offer(59)——滑動視窗的最大值
- 視窗
- 演算法~利用zset實現滑動視窗限流演算法
- 使用 Redis 實現限流——滑動視窗演算法Redis演算法