Apache Flink是由Apache軟體基金會開發的開源流處理框架,其核心是用Java和Scala編寫的分散式流資料流引擎。Flink以資料並行和流水線方式執行任意流資料程式,Flink的流水線執行時系統可以執行批處理和流處理程式。此外,Flink的執行時本身也支援迭代演算法的執行。
Flink提供高吞吐量、低延遲的流資料引擎以及對事件-時間處理和狀態管理的支援。Flink應用程式在發生機器故障時具有容錯能力,並且支援exactly-once語義。程式可以用Java、Scala、Python和SQL等語言編寫,並自動編譯和最佳化到在叢集或雲環境中執行的資料流程式。
Flink並不提供自己的資料儲存系統,但為Amazon Kinesis、Apache Kafka、Alluxio、HDFS、Apache Cassandra和Elasticsearch等系統提供了資料來源和接收器。
Apache Flink的資料流程式設計模型在有限和無限資料集上提供單次事件(event-at-a-time)處理。在基礎層面,Flink程式由流和轉換組成。 “從概念上講,流是一種(可能永無止境的)資料流記錄,轉換是一種將一個或多個流作為輸入並因此產生一個或多個輸出流的操作”。
Apache Flink包括兩個核心API:用於有界或無界資料流的資料流API和用於有界資料集的資料集API。Flink還提供了一個表API,它是一種類似SQL的表示式語言,用於關係流和批處理,可以很容易地嵌入到Flink的資料流和資料集API中。Flink支援的最高階語言是SQL,它在語義上類似於表API,並將程式表示為SQL查詢表示式。
Flink程式在執行後被對映到流資料流,[18]每個Flink資料流以一個或多個源(資料輸入,例如訊息佇列或檔案系統)開始,並以一個或多個接收器(資料輸出,如訊息佇列、檔案系統或資料庫等)結束。Flink可以對流執行任意數量的變換,這些流可以被編排為有向無環資料流圖,允許應用程式分支和合並資料流。
Flink提供現成的源和接收聯結器,包括Apache Kafka、Amazon Kinesis、HDFS和Apache Cassandra等。
Flink程式可以作為叢集內的分散式系統執行,也可以以獨立模式或在YARN、Mesos、基於Docker的環境和其他資源管理框架下進行部署。
Apache Flink具有一種基於分散式檢查點的輕量級容錯機制。檢查點是應用程式狀態和源流中位置的自動非同步快照。在發生故障的情況下,啟用了檢查點的Flink程式將在恢復時從上一個完成的檢查點恢復處理,確保Flink在應用程式中保持一次性(exactly-once)狀態語義。檢查點機制暴露應用程式程式碼的介面,以便將外部系統包括在檢查點機制中(如開啟和提交資料庫系統的事務)。
Flink還包括一種名為儲存點的機制,它是一種手動觸發的檢查點。使用者可以生成儲存點,停止正在執行的Flink程式,然後從流中的相同應用程式狀態和位置恢復程式。 儲存點可以在不丟失應用程式狀態的情況下對Flink程式或Flink群集進行更新。從Flink 1.2開始,儲存點還允許以不同的並行性重新啟動應用程式,這使得使用者可以適應不斷變化的工作負載。
Flink的資料流API支援有界或無界資料流上的轉換(如過濾器、聚合和視窗函式),包含了20多種不同型別的轉換,可以在Java和Scala中使用。
有狀態流處理程式的一個簡單Scala示例是從連續輸入流發出字數並在5秒視窗中對資料進行分組的應用:
Apache Flink是由Apache軟體基金會開發的開源流處理框架,其核心是用Java和Scala編寫的分散式流資料流引擎。Flink以資料並行和流水線方式執行任意流資料程式,Flink的流水線執行時系統可以執行批處理和流處理程式。此外,Flink的執行時本身也支援迭代演算法的執行。
Flink提供高吞吐量、低延遲的流資料引擎以及對事件-時間處理和狀態管理的支援。Flink應用程式在發生機器故障時具有容錯能力,並且支援exactly-once語義。程式可以用Java、Scala、Python和SQL等語言編寫,並自動編譯和最佳化到在叢集或雲環境中執行的資料流程式。
Flink並不提供自己的資料儲存系統,但為Amazon Kinesis、Apache Kafka、Alluxio、HDFS、Apache Cassandra和Elasticsearch等系統提供了資料來源和接收器。
Apache Flink的資料流程式設計模型在有限和無限資料集上提供單次事件(event-at-a-time)處理。在基礎層面,Flink程式由流和轉換組成。 “從概念上講,流是一種(可能永無止境的)資料流記錄,轉換是一種將一個或多個流作為輸入並因此產生一個或多個輸出流的操作”。
Apache Flink包括兩個核心API:用於有界或無界資料流的資料流API和用於有界資料集的資料集API。Flink還提供了一個表API,它是一種類似SQL的表示式語言,用於關係流和批處理,可以很容易地嵌入到Flink的資料流和資料集API中。Flink支援的最高階語言是SQL,它在語義上類似於表API,並將程式表示為SQL查詢表示式。
程式設計模型和分散式執行時Flink程式在執行後被對映到流資料流,[18]每個Flink資料流以一個或多個源(資料輸入,例如訊息佇列或檔案系統)開始,並以一個或多個接收器(資料輸出,如訊息佇列、檔案系統或資料庫等)結束。Flink可以對流執行任意數量的變換,這些流可以被編排為有向無環資料流圖,允許應用程式分支和合並資料流。
Flink提供現成的源和接收聯結器,包括Apache Kafka、Amazon Kinesis、HDFS和Apache Cassandra等。
Flink程式可以作為叢集內的分散式系統執行,也可以以獨立模式或在YARN、Mesos、基於Docker的環境和其他資源管理框架下進行部署。
狀態:檢查點、儲存點和容錯Apache Flink具有一種基於分散式檢查點的輕量級容錯機制。檢查點是應用程式狀態和源流中位置的自動非同步快照。在發生故障的情況下,啟用了檢查點的Flink程式將在恢復時從上一個完成的檢查點恢復處理,確保Flink在應用程式中保持一次性(exactly-once)狀態語義。檢查點機制暴露應用程式程式碼的介面,以便將外部系統包括在檢查點機制中(如開啟和提交資料庫系統的事務)。
Flink還包括一種名為儲存點的機制,它是一種手動觸發的檢查點。使用者可以生成儲存點,停止正在執行的Flink程式,然後從流中的相同應用程式狀態和位置恢復程式。 儲存點可以在不丟失應用程式狀態的情況下對Flink程式或Flink群集進行更新。從Flink 1.2開始,儲存點還允許以不同的並行性重新啟動應用程式,這使得使用者可以適應不斷變化的工作負載。
資料流APIFlink的資料流API支援有界或無界資料流上的轉換(如過濾器、聚合和視窗函式),包含了20多種不同型別的轉換,可以在Java和Scala中使用。
有狀態流處理程式的一個簡單Scala示例是從連續輸入流發出字數並在5秒視窗中對資料進行分組的應用: