Flink中會話窗口是什么?這篇文章講明白了!
Flink從1.1開始支持Session window,它是屬于基于時間的窗口。
這里以EventTime為例,基于時間的窗口,可以分為3種:
TumblingEventTimeWindows
SlidingEventTimeWindows
EventTimeSessionWindows

對于Tumbling與Sliding窗口,其窗口的時間大小是固定的, 只是滑動的不同,例如10秒鐘一個窗口,那么窗口中開始時間和結(jié)束時間一定是一個10秒的間隔,例如從10:00:00到10:00:10。Sliding的窗口大小也是固定的,例如每隔10秒鐘統(tǒng)計過去20秒的數(shù)據(jù),那么它的窗口也是從10:00:00到10:00:20,大小是20秒。
而Session window的窗口大小,則是由數(shù)據(jù)本身決定。例如,基于同一個key,有如下幾條數(shù)據(jù),其自身時間戳如下:
那么,假設Session Window的時間gap如果是6秒,那么,上面的數(shù)據(jù)會被分成以下幾個窗口

可以看到,session window只需要設置一個時間間隔(gap)即可定義一個session window機制。
session window窗口分析
下面我們來分析下上面的數(shù)據(jù)。?
首先,我們設置的時間gap是6秒,那么,當相鄰的記錄相差>=6秒時,則觸發(fā)窗口
對于第一條記錄與第二條記錄,其時間間隔是3秒,那么這兩條記錄屬于同一個窗口內(nèi),此時并不觸發(fā)窗口
第二條與第三條記錄,間隔2秒,也不觸發(fā)窗口
第三條與第四條記錄,間隔>=6秒(7秒),此時,窗口被觸發(fā)了
第四條記錄與第五條記錄間隔3秒,不觸發(fā)
第五條與第六條間隔9秒,觸發(fā)
第六條與第七條間隔6秒,觸發(fā)
第七條與第八條間隔12秒,觸發(fā)
到此,上邊這些數(shù)據(jù)被劃分到不同的窗口中,每個窗口的大小也不一樣。
那么,每個窗口的時間范圍有沒有什么共性?我們可以按照下面的公式來計算每個窗口的時間范圍:
窗口大小=[第一條數(shù)據(jù)的時間,第一個與相鄰數(shù)據(jù)相差大于等于gap的時間+gap)
看似有點難以理解,其實現(xiàn)實的意義就是:窗口內(nèi)包含的數(shù)據(jù)是“活躍的”。
例如:用戶點擊行為,如果認為30秒間隔用戶沒有操作,則認為是不活躍的。那么通過session window,定義一個30秒的gap,此時,每個窗口內(nèi)的數(shù)據(jù),都是用戶在活躍期間的數(shù)據(jù),超過30秒了沒有任何操作,則認為用戶不活躍,有可能下線。
