1. 程式人生 > >《Apache Flink官方文件》 Apache Flink介紹

《Apache Flink官方文件》 Apache Flink介紹

原文連結 譯者:ivansong

下面是關於Apache Flink(以下簡稱Filnk)框架和流式計算的概述。為了更專業、更技術化的介紹,在Flink文件中推薦了一些“概念性”的文章。

1、無窮資料集的持續計算

在我們詳細介紹Flink前,複習一下當我們計算資料選擇運算模型時,很可能會遇到的一個更高級別的資料集型別。下面有兩個觀點經常容易混淆,很有必要去澄清它們。

(1)兩種資料集型別:

①無窮資料集:無窮的持續整合的資料集合。

②有界資料集:有限不會改變的資料集合。

很多現實中傳統地認為有界或者批量的資料集合實際上是無窮資料集,不論這些資料是儲存在HDFS的一系列目錄中還是在那些基於日誌的系統中(如 Apache Kafka)。

包含無邊界資料集的場景,舉例如下:

①終端使用者用手機或者web應用做的互動。

②物理感測器提供的測量資料。

③金融市場產生的資料。

④伺服器上的日誌資料。

(2)兩種資料運算模型

①流式:只要資料一直在產生,計算就持續地進行

②批處理:在預先定義的時間內執行計算,當完成時釋放計算機資源

用任意一種運算模型去計算任何一種資料集是可能的,儘管這種選擇不是最佳的。比如,批處理長期應用於處理無窮資料集,儘管存在視窗、狀態管理和無序資料等潛在的風險問題。

Flink 是基於直觀地去處理無窮資料集的流式運算模型:流式運算會一直計算持續生成的資料。資料集與運算模型的對應,在準確性和效能上有很大的優勢。

2、功能特點:為什麼選擇Flink?

Flink是一個開源的分散式流式處理框架:

①提供準確的結果,甚至在出現無序或者延遲載入的資料的情況下。

②它是狀態化的容錯的,同時在維護一次完整的的應用狀態時,能無縫修復錯誤。

③大規模執行,在上千個節點執行時有很好的吞吐量和低延遲。

更早的時候,我們討論了資料集型別(有界 vs 無窮)和運算模型(批處理vs流式)的匹配。Flink的流式計算模型啟用了很多功能特性,如狀態管理,處理無序資料,靈活的視窗,這些功能對於得出無窮資料集的精確結果是很重要的。

  • Flink保證狀態化計算強一致性。”狀態化“意味著應用可以維護隨著時間推移已經產生的資料聚合或者,並且Filnk的檢查點機制在一次失敗的事件中一個應用狀態的強一致性。

exactly_once_state

  • Flink支援流式計算和帶有事件時間語義的視窗。事件時間機制使得那些事件無序到達甚至延遲到達的資料流能夠計算出精確的結果。

out_of_order_stream

  • 除了提供資料驅動的視窗外,Flink還支援基於時間,計數,session等的靈活視窗。視窗能夠用靈活的觸發條件定製化從而達到對複雜的流傳輸模式的支援。Flink的視窗使得模擬真實的建立資料的環境成為可能。

windows

  • Flink的容錯能力是輕量級的,允許系統保持高併發,同時在相同時間內提供強一致性保證。Flink以零資料丟失的方式從故障中恢復,但沒有考慮可靠性和延遲之間的折衷。

distributed_snapshots

  • Flink能滿足高併發和低延遲(計算大量資料很快)。下圖顯示了Apache Flink 與 Apache Storm在完成流資料清洗的分散式任務的效能對比。

streaming_performance

  • Flink儲存點提供了一個狀態化的版本機制,使得能以無丟失狀態和最短停機時間的方式更新應用或者回退歷史資料。

savepoints

  • Flink被設計成能用上千個點在大規模叢集上執行。除了支援獨立叢集部署外,Flink還支援YARN 和Mesos方式部署。

parallel_dataflows

3、Flink,流模型和有界資料集

當你閱讀Flink的文件時,可能會發現文章中既有面向無窮資料集的資料流api,也有面向有界資料的資料集api。

此前的寫作,我們介紹了直觀上適合無窮資料集的流式運算模型(持續地執行處理,一次一個事件)。所以有界資料集是如何與流式運算範例相關呢?

這是Flink 資料集API所呈現的。Flink內部將有界資料集作為“有限的流”處理,這種方式使得Flink在如何管理有界與無窮資料集上僅僅有非常少的差異。

所以用Flink去處理有界資料和無窮資料是可能的,這兩個Api執行在相同的分散式流式運算引擎。這是一個簡單又高效的模型。

4、從下至上,Flink整體結構

flink-stack-frontpage

(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將處理之後的資料傳送的地點。

source-transform-sink-update
一個發展挺好的生態系統對於進出一個Flink程式的資料作高效移動是非常必要的,Flink支援範圍廣泛的用於資料來源和聯結器的第三方系統的連線。如果想學習更多,這裡收集了Flink生態系統的資訊

6、後續

總而言之,Apache Flink是一個開源流處理框架,可以消除通常與開源流引擎相關聯的“效能與可靠性”折衷,並在兩個類別中始終保持一致。 接下來介紹,我們建議您嘗試我們的快速入門下載最新的穩定版本的Flink,或檢視文件。

我們鼓勵您加入Flink使用者郵件列表,並與社群分享您的問題。 我們在這裡幫助您充分利用Flink。