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