《Apache Flink官方文檔》 Apache Flink介紹
下麵是關於Apache Flink(以下簡稱Filnk)框架和流式計算的概述。為了更專業、更技術化的介紹,在Flink文檔中推薦了一些“概念性”的文章。
1、無窮數據集的持續計算
在我們詳細介紹Flink前,複習一下當我們計算數據選擇運算模型時,很可能會遇到的一個更高級別的數據集類型。下麵有兩個觀點經常容易混淆,很有必要去澄清它們。
(1)兩種數據集類型:
①無窮數據集:無窮的持續集成的數據集合。
②有界數據集:有限不會改變的數據集合。
很多現實中傳統地認為有界或者批量的數據集合實際上是無窮數據集,不論這些數據是存儲在HDFS的一係列目錄中還是在那些基於日誌的係統中(如 Apache Kafka)。
包含無邊界數據集的場景,舉例如下:
①終端用戶用手機或者web應用做的交互。
②物理傳感器提供的測量數據。
③金融市場產生的數據。
④服務器上的日誌數據。
(2)兩種數據運算模型
①流式:隻要數據一直在產生,計算就持續地進行
②批處理:在預先定義的時間內運行計算,當完成時釋放計算機資源
用任意一種運算模型去計算任何一種數據集是可能的,盡管這種選擇不是最佳的。比如,批處理長期應用於處理無窮數據集,盡管存在視窗、狀態管理和無序數據等潛在的風險問題。
Flink 是基於直觀地去處理無窮數據集的流式運算模型:流式運算會一直計算持續生成的數據。數據集與運算模型的對應,在準確性和性能上有很大的優勢。
2、功能特點:為什麼選擇Flink?
Flink是一個開源的分布式流式處理框架:
①提供準確的結果,甚至在出現無序或者延遲加載的數據的情況下。
②它是狀態化的容錯的,同時在維護一次完整的的應用狀態時,能無縫修複錯誤。
③大規模運行,在上千個節點運行時有很好的吞吐量和低延遲。
更早的時候,我們討論了數據集類型(有界 vs 無窮)和運算模型(批處理vs流式)的匹配。Flink的流式計算模型啟用了很多功能特性,如狀態管理,處理無序數據,靈活的視窗,這些功能對於得出無窮數據集的精確結果是很重要的。
- Flink保證狀態化計算強一致性。”狀態化“意味著應用可以維護隨著時間推移已經產生的數據聚合或者,並且Filnk的檢查點機製在一次失敗的事件中一個應用狀態的強一致性。
- Flink支持流式計算和帶有事件時間語義的視窗。事件時間機製使得那些事件無序到達甚至延遲到達的數據流能夠計算出精確的結果。
- 除了提供數據驅動的視窗外,Flink還支持基於時間,計數,session等的靈活視窗。視窗能夠用靈活的觸發條件定製化從而達到對複雜的流傳輸模式的支持。Flink的視窗使得模擬真實的創建數據的環境成為可能。
- Flink的容錯能力是輕量級的,允許係統保持高並發,同時在相同時間內提供強一致性保證。Flink以零數據丟失的方式從故障中恢複,但沒有考慮可靠性和延遲之間的折衷。
- Flink能滿足高並發和低延遲(計算大量數據很快)。下圖顯示了Apache Flink 與 Apache Storm在完成流數據清洗的分布式任務的性能對比。
- Flink保存點提供了一個狀態化的版本機製,使得能以無丟失狀態和最短停機時間的方式更新應用或者回退曆史數據。
- Flink被設計成能用上千個點在大規模集群上運行。除了支持獨立集群部署外,Flink還支持YARN 和Mesos方式部署。
3、Flink,流模型和有界數據集
當你閱讀Flink的文檔時,可能會發現文章中既有麵向無窮數據集的數據流api,也有麵向有界數據的數據集api。
此前的寫作,我們介紹了直觀上適合無窮數據集的流式運算模型(持續地執行處理,一次一個事件)。所以有界數據集是如何與流式運算範例相關呢?
這是Flink 數據集API所呈現的。Flink內部將有界數據集作為“有限的流”處理,這種方式使得Flink在如何管理有界與無窮數據集上僅僅有非常少的差異。
所以用Flink去處理有界數據和無窮數據是可能的,這兩個Api運行在相同的分布式流式運算引擎。這是一個簡單又高效的模型。
4、從下至上,Flink整體結構
(1)部署模式
Flink能部署在雲上或者局域網中,能在獨立集群或者在被YARN或Mesos管理的集群上運行。
(2)運行期
Flink的核心是分布式流式數據引擎,意味著數據以一次一個事件的形式被處理,這跟批次處理有很大不同。這個保證了上麵說的那些Flink彈性和高性能的特性。
(3)API
- Flink的數據流API適合用於那些實現在數據流上轉換的程序(例如:過濾,更新狀態,定義視窗,聚合)
- Flink的數據集API適合用於那些實現在數據流上轉換的程序(例如:過濾,映射,加入,分組)
- 表Api適合於關係流和批處理,能輕鬆嵌入Flink的數據集APi和數據流API的類SQL表達式的語言(java和Scala)
- 流式SQL允許在流和多表上執行SQL查詢。這個句法是基於 Apache Calcite。
(4)代碼庫
Flink還包括用於複雜事件處理,機器學習,圖形處理和Apache Storm兼容性的專用代碼庫。
5、Flink和其他的框架
從最基本的水平上看,一個Flink程序由下麵幾部分組成:
- 數據源:Flink處理的輸入的數據。
- 轉化:Flink對數據進行處理的步驟。
- 接收器:Flink將處理之後的數據發送的地點。
一個發展挺好的生態係統對於進出一個Flink程序的數據作高效移動是非常必要的,Flink支持範圍廣泛的用於數據源和連接器的第三方係統的連接。如果想學習更多,這裏收集了Flink生態係統的信息。
6、後續
總而言之,Apache Flink是一個開源流處理框架,可以消除通常與開源流引擎相關聯的“性能與可靠性”折衷,並在兩個類別中始終保持一致。 接下來介紹,我們建議您嚐試我們的快速入門,下載最新的穩定版本的Flink,或查看文檔。
我們鼓勵您加入Flink用戶郵件列表,並與社區分享您的問題。 我們在這裏幫助您充分利用Flink。
最後更新:2017-05-18 20:36:56