Flink菜鸟教程(二)——时间概念
?歡迎關(guān)注公眾號——《數(shù)據(jù)三分鐘》
一線大廠的師兄師姐結(jié)合自己的工作實踐,將數(shù)據(jù)知識淺顯道來,每天三分鐘,助你成為數(shù)據(jù)達(dá)人。還有面試指導(dǎo)和內(nèi)推機會。
? ? ? ?上一節(jié)說到,實時計算中的數(shù)據(jù)可以看成無界流(unbounded stream),沒有確切的結(jié)束時間,就像水流一樣——逝者如斯夫,不舍晝夜。這也是實時數(shù)據(jù)區(qū)別于離線數(shù)據(jù)的地方,離線數(shù)據(jù)是有界的,有確定的開始時間和結(jié)束時間,因此所有的離線計算都是基于確定的有限數(shù)據(jù)展開的。
一、實時計算中時間的重要性
? ? ? ?離線計算模式下,計算引擎攝入全量的需要計算的有界數(shù)據(jù),按照確定的維度進行聚合,所有的計算過程都是確定的。但是在實時計算中卻截然不同,首先實時計算是持續(xù)不斷進行的,由于網(wǎng)絡(luò)波動等情況不可避免,數(shù)據(jù)最終到達(dá)算子的時間和數(shù)據(jù)真實產(chǎn)生的時間并不一致,那么flink引擎以什么為計算的基準(zhǔn)呢?又怎么去觸發(fā)計算呢?這里就不得不提到窗口機制了,它是經(jīng)典的無界數(shù)據(jù)的分組計算方式。流式計算中的數(shù)據(jù)是一條一條源源不斷產(chǎn)生的記錄,每一條記錄都會有產(chǎn)生的時間、進入Flink引擎的時間和到達(dá)算子的時間,這些時間分別對應(yīng)Event time、Ingestion time、Processing time,Flink就是按照這些時間對數(shù)據(jù)進行分組和計算的。
二、事件時間(Event time)
? ? ? ?事件時間是記錄數(shù)據(jù)真實產(chǎn)生時候的時間,它是每一條數(shù)據(jù)在物理世界中的先后順序,也是計算中首選的時間基準(zhǔn)!但是選用事件時間也不得不面臨一些問題:首先,事件時間是數(shù)據(jù)產(chǎn)生時候的時間,并非被Flink計算時候的時間,也就是說,數(shù)據(jù)在被計算的時候一定會不可避免地發(fā)生錯亂,我們?nèi)绾渭幢S袛?shù)據(jù)最真實的產(chǎn)生時間,有能夠兼容數(shù)據(jù)在傳輸過程中的亂序問題,這就可以采用watermark機制(后續(xù)文章會詳細(xì)寫到)。
三、處理時間(Processing time)
? ? ? ?處理時間是數(shù)據(jù)進入Flink算子的時間,也就是計算節(jié)點機器的本地時間,這種時間可以帶來最好的性能和最低的延遲。但是,這樣的計算也最不具準(zhǔn)確性,當(dāng)我們回跑數(shù)據(jù)時,難以保證數(shù)據(jù)的一致性。
四、攝入時間(Ingestion time)
? ? ? ?攝入時間是數(shù)據(jù)進入Flink的時間,數(shù)據(jù)進入的時候會打上系統(tǒng)時間戳。攝入時間從發(fā)生的時間上看,處于事件時間和處理時間之間,它的實現(xiàn)成本也處在事件時間和處理時間之間。攝入時間可以提供比處理時間更高的確定性,因為數(shù)據(jù)進入Flink后它的時間就確定好了,在后續(xù)的計算中,可以有效地應(yīng)對由于多并發(fā)或數(shù)據(jù)在節(jié)點間shuffle帶來的亂序問題。
? ? ? ?但是在實際應(yīng)用中,事件時間和處理時間用得最多,且Flink SQL目前僅支持事件時間和處理時間。
總結(jié)
以上是生活随笔為你收集整理的Flink菜鸟教程(二)——时间概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7打不开桌面计算机,win7电脑中
- 下一篇: DisplayTag详解