爲何Flink會成爲下一代大數據處理框架的標準?數據庫
01 什麼是Flink?編程
在當前數據量激增傳統的時代,不一樣的業務場景都有大量的業務數據產生,對於這些不斷產生的數據應該如何進行有效地處理,成爲當下大多數公司所面臨的問題。網絡
隨着雅虎對Hadoop的開源,愈來愈多的大數據處理技術開始涌入人們的視線,例如目前比較流行大數據處理引擎Apache Spark,基本上已經取代了MapReduce成爲當前大數據處理的標準。架構
但隨着數據的不斷增加,新技術的不斷髮展,人們逐漸意識到對實時數據處理的重要性,企業須要可以同時支持高吞吐、低延遲、高性能的流處理技術來處理日益增加的數據。框架
相對於傳統的數據處理模式,流式數據處理則有着更高的處理效率和成本控制。Apache Flink就是近年來在開源社區發展不斷髮展的可以支持同時支持高吞吐、低延遲、高性能分佈式處理框架。運維
在2010至2014年間,由柏林工業大學,柏林洪堡大學和哈索普拉特納研究所聯合發起名爲「Stratosphere: Information Management on the Cloud」研究項目,該項目在當時的社區逐漸具備必定社區知名度,2014年4月,Stratosphere代碼被貢獻給Apache 軟件基金會,成爲Apache基金會孵化器項目。分佈式
期初參與該項目的核心成員均來自Stratosphere原來的核心成員,以後團隊的大部分創始成員離開學校,共同創辦了一家名叫Data Artisans的公司,其主要業務即是將Stratosphere,也就是以後的Flink實現商業化。在項目孵化期間,項目Stratosphere更名爲Flink。oop
Flink在德語中是快速和靈敏的意思,用來體現流式數據處理器的速度快和靈活性強等特色,同時使用棕紅色松鼠圖案做爲Flink項目的Logo,也是主要藉助於松鼠靈活快速的特色,由此Flink開始正式地進入社區開發者的視線。性能
02 爲何Flink會成爲下一代大數據處理框架的標準?大數據
在2014年12月,該項目成爲Apache 軟件基金會頂級項目,從2015年09月發佈第一個穩定版本0.9,到2019年4月已經發布到1.8的版本,更多的社區開發成員也逐步地加入,如今Flink在全球範圍內擁有350多位的開發人員,不斷有新的特性被髮布。
同時在全球範圍內,愈來愈多的公司開始使用Flink,在國內比較出名的互聯網公司如Alibaba,美團,滴滴等,都在大規模的使用Flink做爲企業的分佈式大數據處理引擎。
Flink在近年來逐步被人們所熟知和使用,其主要緣由不只由於提供同時支持高吞吐、低延遲和exactly-once語義的實時計算能力,同時Flink還提供了基於流式計算引擎處理批量數據的計算能力,真正意義實現了批流統一,同時隨着Alibaba對Blink的開源,極大地加強了Flink對批計算領域的支持。
衆多優秀的特性,使得Flink成爲開源大數據數據處理框架中的一顆新星,隨着國內社區不斷推進,愈來愈多的國內公司開始選擇使用Flink做爲實時數據處理的技術,在未來不久的時間內,Flink也將會成爲企業內部主流的數據處理框架,最終成爲下一代大數據數據處理框架的標準。
03 Flink的重要特性及優點
有狀態流計算將會隨着技術的發展,逐步成爲企業做爲構建數據平臺的架構模式,而這種技術實現的開源方案目前從社區來看,可以知足的就是Apache Flink。Flink經過實現Google Dataflow流式計算模型實現了高吞吐,低延遲,高性能兼具實時流式計算框架。
▲有狀態計算架構
同時Flink支持高效容錯的狀態管理,Flink可以將其狀態維護在內存或RockDB數據庫中,爲了防止狀態在計算過程當中由於系統異常而出現丟失,Flink週期性的經過分佈式快照技術CheckPoints實現狀態的持久化維護,使得在系統即便在停機或者異常的狀況下都能正確的進行狀態恢復,從而保證在任什麼時候間都能計算出正確的結果。
數據架構的演變過程,伴隨着技術的不斷迭代更新,Flink具備先進的架構理念,以及諸多的優秀特性,以及完善的編程接口,而Flink也在每一次的Release版本中,不斷推出新的特性。
例如Queryable State功能的提出,將直接允許用戶經過遠程的方式直接獲取流式計算任務的狀態信息,也就是說數據不須要落地數據庫就能直接從流式應用中直接查詢出,對於實時交互式的查詢業務能夠直接從Flink的狀態中查詢最新的結果,固然這個功能目前還屬於Beta版本,可是相信在不久的將來,會變得愈來愈完善,那時Flink將不只做爲實時流式處理的框架,更多的可能會成爲一套實時的存儲引擎,會讓更多的用戶從有狀態計算的技術中獲取收益。
同時支持高吞吐、低延遲、高性能
Flink是一套集高吞吐,低延遲,高性能三者於一身的分佈式流式數據處理框架。
很是成熟的計算框架Apache Spark也只能兼顧高吞吐和高性能特性,在Spark Streaming流式計算中沒法作到低延遲保障;而Apache Storm只能支持低延遲和高性能特性,可是沒法知足高吞吐的要求。而對於知足高吞吐,低延遲,高性能這三個目標對分佈式流式計算框架是很是重要的。
支持事件時間(Event Time)概念
在流式計算領域中,窗口計算的地位舉足輕重,但目前大多數計算框架窗口計算所採用的都是系統時間(Process Time),也是事件傳輸到計算框架處理時,系統主機的當前時間,Flink可以支持基於事件時間(Event Time)語義的進行窗口計算,就是使用事件產生的時間,這種時間機制使得事件即便無序到達甚至延遲到達,數據流都可以計算出精確的結果,同時保持了事件本來產生時的在時間維度的特色,而不受網絡傳輸或者計算框架的影響。
支持有狀態計算
Flink在1.4版本中實現了狀態管理,所謂狀態就是在流式計算過程當中將算子的中間結果數據的保存在內存或者DB中,等下一個事件進入接着從狀態中獲取中間結果進行計算,從而無需基於所有的原始數據統計結果,這種作法極大地提高了系統的性能,同時也下降了計算過程的耗時。
對於數據量很是大且邏輯運算很是複雜的流式運算,基於狀態的流式計算則顯得很是使用。
支持高度靈活的窗口(Window)操做
在流處理應用中,數據是接二連三的,須要經過窗口的方式對流數據進行必定範圍的聚合計算,例如統計在過去的1分鐘內有多少用戶點擊了某一網頁,在這種狀況下,咱們必須定義一個窗口,用來收集最近一分鐘內的數據,並對這個窗口內的數據再進行計算。
Flink將窗口劃分爲基於Time、Count、Session,以及Data-driven等類型的窗口操做,窗口可以用靈活的觸發條件定製化從而達到對複雜的流傳輸模式的支持,不一樣的窗口操做應用可以反饋出真實事件產生的狀況,用戶能夠定義不一樣的窗口觸發機制來知足不一樣的需求。
基於輕量級分佈式快照(Snapshot)實現的容錯
Flink可以分佈式運行在上千個節點之上,將一個大型計算的流程拆解成小的計算過程,而後將計算過程分佈到單臺並行節點上進行處理。
在任務執行過程當中,可以自動的發現事件處理過程當中的錯誤而致使數據不一致的問題,常見的錯誤類型例如:節點宕機,或者網路傳輸問題,或是因爲用戶由於升級或修復問題而致使計算服務重啓等。
在這些狀況下,經過基於分佈式快照技術的Checkpoints,將執行過程當中的任務信息進行持久化存儲,一旦任務出現異常宕機,Flink可以進行任務的自動恢復,從而確保數據在處理過程當中的一致性。
基於JVM實現獨立的內存管理
內存管理是每套計算框架須要重點考慮的領域,尤爲對於計算量比較大的計算場景,數據在內存中該如何進行管理,針對內存管理這塊,Flink實現了自身管理內存的機制,儘量減小Full GC對系統的影響。
另外經過自定義序列化/反序列化方法將全部的對象轉換成二進制在內存中存儲,下降數據存儲的大小,更加有效的對內存空間進行利用,下降GC所帶來的性能降低或者任務中止的風險,同時提高了分佈式處理過數據傳輸的性能。
所以Flink較其餘分佈式處理的框架則會顯得更加穩定,不會由於JVM GC等問題而致使整個應用宕機的問題。
Save Points(保存點)
對於7*24小時運行的流式應用,數據源源不斷的接入,在一段時間內應用的終止都有可能致使數據的丟失或者計算結果的不許確性,例如進行版本的升級,停機運維操做等,都能致使這種狀況發生。
然而值得一提的是Flink經過其Save Points技術可以將任務執行的快照(Snapshot)保存在存儲介質上,等待任務重啓的時候能夠直接從實現保存的Save Points恢復原有的計算狀態,使得任務繼續按照停機以前的狀態繼續運行,Save Points技術可讓用戶更好的管理和運維實時流式應用。
同時Flink除了上述的特性以外也具備其餘很是優秀的特性,可讓用戶有更多選擇。Flink具有很是多的優秀特性,這不只讓Flink在社區的知名度愈來愈高,也吸引了衆多的企業參與研發和使用Flink這項技術。