一篇文章帶你徹底明白Flink中Window的2個(gè)類(lèi)型
Window可以分成兩類(lèi):
CountWindow:按照指定的數(shù)據(jù)條數(shù)生成一個(gè)Window,與時(shí)間無(wú)關(guān)。
滾動(dòng)計(jì)數(shù)窗口,每隔N條數(shù)據(jù),統(tǒng)計(jì)前N條數(shù)據(jù)
滑動(dòng)計(jì)數(shù)窗口,每隔N條數(shù)據(jù),統(tǒng)計(jì)前M條數(shù)據(jù)
TimeWindow:按照時(shí)間生成Window。
滾動(dòng)時(shí)間窗口,每隔N時(shí)間,統(tǒng)計(jì)前N時(shí)間范圍內(nèi)的數(shù)據(jù),窗口長(zhǎng)度N,滑動(dòng)距離N
滑動(dòng)時(shí)間窗口,每隔N時(shí)間,統(tǒng)計(jì)前M時(shí)間范圍內(nèi)的數(shù)據(jù),窗口長(zhǎng)度M,滑動(dòng)距離N
會(huì)話(huà)窗口,按照會(huì)話(huà)劃定的窗口

滾動(dòng)窗口 - TumblingWindow概念
流是連續(xù)的,無(wú)界的(有明確的開(kāi)始,無(wú)明確的結(jié)束)
假設(shè)有個(gè)紅綠燈,提出個(gè)問(wèn)題:計(jì)算一下通過(guò)這個(gè)路口的汽車(chē)數(shù)量

對(duì)于這個(gè)問(wèn)題,肯定是無(wú)法回答的,為何?
因?yàn)?,統(tǒng)計(jì)是一種對(duì)固定數(shù)據(jù)進(jìn)行計(jì)算的動(dòng)作。
因?yàn)榱鞯臄?shù)據(jù)是源源不斷的,無(wú)法滿(mǎn)足固定數(shù)據(jù)的要求(因?yàn)椴恢篮螘r(shí)結(jié)束)
那么,我們換個(gè)問(wèn)題:統(tǒng)計(jì)1分鐘內(nèi)通過(guò)的汽車(chē)數(shù)量
那么,對(duì)于這個(gè)問(wèn)題,我們就可以解答了。因?yàn)檫@個(gè)問(wèn)題確定了數(shù)據(jù)的邊界,從無(wú)界的流數(shù)據(jù)中,取出了一部分有邊界的數(shù)據(jù)子集合進(jìn)行計(jì)算。

那么,這個(gè)行為或者說(shuō)這個(gè)統(tǒng)計(jì)的數(shù)據(jù)邊界,就稱(chēng)之為窗口。
同時(shí),我們的問(wèn)題,是以時(shí)間來(lái)劃分被處理的數(shù)據(jù)邊界的,那么按照時(shí)間劃分邊界的就稱(chēng)之為:時(shí)間窗口
反之,如果換個(gè)問(wèn)題,統(tǒng)計(jì)100輛通過(guò)的車(chē)?yán)锩嬗卸嗌賹汃R品牌,那么這個(gè)邊界的劃分就是按照數(shù)量的,這樣的稱(chēng)之為:計(jì)數(shù)窗口
同時(shí),這樣的窗口被稱(chēng)之為?滾動(dòng)窗口,按照窗口劃分依據(jù)分為:滾動(dòng)時(shí)間窗口、滾動(dòng)計(jì)數(shù)窗口
滑動(dòng)窗口 – SlidingWindow概念
同樣是需求,改為:
每隔1分鐘,統(tǒng)計(jì)前面2分鐘內(nèi)通過(guò)的車(chē)輛數(shù)
對(duì)于這個(gè)需求我們可以看出,窗口長(zhǎng)度是2分鐘,每隔1分鐘統(tǒng)計(jì)一次。
或者:每通過(guò)100輛車(chē),統(tǒng)計(jì)前面通過(guò)的50輛車(chē)的品牌占比
對(duì)于這個(gè)需求可以看出,窗口長(zhǎng)度是50輛車(chē),但是每隔100輛車(chē)統(tǒng)計(jì)一次
對(duì)于這樣的窗口,我們稱(chēng)之為滑動(dòng)窗口

那么在這里面,統(tǒng)計(jì)多少數(shù)據(jù)是窗口長(zhǎng)度(如統(tǒng)計(jì)2分鐘內(nèi)的數(shù)據(jù),統(tǒng)計(jì)50輛車(chē)中的數(shù)據(jù))
隔多久統(tǒng)計(jì)一次稱(chēng)之為滑動(dòng)距離(如,每隔1分鐘,每隔100輛車(chē))
那么可以看出,滑動(dòng)窗口,就是滑動(dòng)距離 不等于 窗口長(zhǎng)度的一種窗口
比如,每隔1分鐘 統(tǒng)計(jì)先前5分鐘的數(shù)據(jù),窗口長(zhǎng)度5分鐘,滑動(dòng)距離1分鐘,不相等
比如,每隔100條數(shù)據(jù),統(tǒng)計(jì)先前50條數(shù)據(jù),窗口長(zhǎng)度50條,滑動(dòng)距離100條,不相等
那如果相等呢?相等就是比如:每隔1分鐘統(tǒng)計(jì)前面1分鐘的數(shù)據(jù),窗口長(zhǎng)度1分鐘,滑動(dòng)距離1分鐘,相等。
對(duì)于這樣的需求可以簡(jiǎn)化成:每隔1分鐘統(tǒng)計(jì)一次數(shù)據(jù),這就是前面說(shuō)的滾動(dòng)窗口咯
那么,我們可以看出:
滾動(dòng)窗口:窗口長(zhǎng)度 = 滑動(dòng)距離
滑動(dòng)窗口:窗口長(zhǎng)度 != 滑動(dòng)距離
其中可以發(fā)現(xiàn),對(duì)于滑動(dòng)窗口:
滑動(dòng)距離 > 窗口長(zhǎng)度, 會(huì)漏掉數(shù)據(jù),比如:每隔5分鐘,統(tǒng)計(jì)前面1分鐘的數(shù)據(jù)(滑動(dòng)距離5分鐘,窗口長(zhǎng)度1分鐘,漏掉4分鐘的數(shù)據(jù))
滑動(dòng)距離 < 窗口長(zhǎng)度, 會(huì)重復(fù)處理數(shù)據(jù),比如:每隔1分鐘,統(tǒng)計(jì)前面5分鐘的數(shù)據(jù)(滑動(dòng)距離1分鐘,窗口長(zhǎng)度5分鐘,重復(fù)處理4分鐘的數(shù)據(jù))
滑動(dòng)距離 = 窗口長(zhǎng)度, 不漏也不會(huì)重復(fù),也就是滾動(dòng)窗口
