Apache_Flink

**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 是由 Apache 軟體基金會內的 Apache Flink 社區基於 Apache 許可證 2.0 開發的，該項目已有超過 100 位代碼提交者和超過 460 貢獻者。（頁面存檔備份，存於網際網路檔案館）

data Artisans（頁面存檔備份，存於網際網路檔案館）是由 Apache Flink 的創始人創建的公司。目前，該公司已聘用了 12 個 Apache Flink 的代碼提交者。

## 概述

Apache Flink 的數據流編程模型在有限和無限數據集上提供單次事件（event-at-a-time）處理。在基礎層面，Flink 程序由流和轉換組成。 「從概念上講，流是一種（可能永無止境的）數據流記錄，轉換是一種將一個或多個流作為輸入並因此產生一個或多個輸出流的操作」。

Apache Flink 包括兩個核心 API：用於有界或無界數據流的數據流 API 和用於有界數據集的數據集 API。Flink 還提供了一個表 API，它是一種類似 SQL 的表達式語言，用於關係流和批處理，可以很容易地嵌入到 Flink 的數據流和數據集 API 中。Flink 支持的最高級語言是 SQL，它在語義上類似於表 API，並將程序表示為 SQL 查詢表達式。

### 編程模型和分布式運行時

Flink 程序在執行後被映射到流數據流，每個 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 開始，保存點還允許以不同的並行性重新啟動應用程式，這使得用戶可以適應不斷變化的工作負載。

### 數據流 API

Flink 的數據流 API（頁面存檔備份，存於網際網路檔案館）支持有界或無界數據流上的轉換（如過濾器、聚合和窗口函數），包含了 20 多種不同類型的轉換，可以在 Java 和 Scala 中使用。

有狀態流處理程序的一個簡單 Scala 示例是從連續輸入流發出字數並在 5 秒窗口中對數據進行分組的應用：

#### Apache Beam - Flink Runner

Apache Beam「提供了一種高級統一編程模型，允許（開發人員）實現可在在任何執行引擎上運行批處理和流數據處理作業」。Apache Flink-on-Beam 運行器是功能最豐富的、由 Beam 社區維護的能力矩陣。

data Artisans 與 Apache Flink 社區一起，與 Beam 社區密切合作，開發了一個強大的 Flink runner。

### 數據集 API

Flink 的數據集 API（頁面存檔備份，存於網際網路檔案館）支持對有界數據集進行轉換（如過濾、映射、連接和分組），包含了 20 多種不同類型的轉換。 該 API 可用於 Java、Scala 和實驗性的 Python API。Flink 的數據集 API 在概念上與數據流 API 類似。

### 表 API 和 SQL

Flink 的表 API（頁面存檔備份，存於網際網路檔案館）是一種類似 SQL 的表達式語言，用於關係流和批處理，可以嵌入 Flink 的 Java 和 Scala 數據集和數據流 API 中。表 API 和 SQL 接口在關係表抽象上運行，可以從外部數據源或現有數據流和數據集創建表。表 API 支持關係運算符，如表上的選擇、聚合和連接等。

也可以使用常規 SQL 查詢表。表 API 提供了和 SQL 相同的功能，可以在同一程序中混合使用。將錶轉換回數據集或數據流時，由關係運算符和 SQL 查詢定義的邏輯計劃將使用 Apache Calcite 進行優化，並轉換為數據集或數據流程序。

## Flink Forward

Flink Forward（頁面存檔備份，存於網際網路檔案館）是一個關於 Apache Flink 的年度會議。第一屆 Flink Forward 於 2015 年在柏林舉行。為期兩天的會議有來自 16 個國家的 250 多名與會者。 會議分為兩個部分，Flink 開發人員提供 30 多個技術演示，另外還有一個 Flink 培訓實踐。

2016 年，350 名與會者參加了會議，40 多位發言人在 3 個平行軌道上進行了技術講座。第三天，與會者被邀請參加實踐培訓課程。

2017 年，該活動也將擴展到舊金山。 會議致力於 Flink 如何在企業中使用、Flink 系統內部、與 Flink 的生態系統集成以及平台的未來進行技術會談。它包含主題演講 Flink 用戶在工業和學術界的講座以及關於 Apache Flink 的實踐培訓課程。

來自以下組織的發言人在 Flink Forward 會議上發表了演講：阿里巴巴集團、Amadeus、Bouygues Telecom、第一資本、Cloudera、data Artisans、EMC、愛立信、Hortonworks、華為、IBM、Google、MapR、MongoDB、Netflix、New Relic、Otto Group，Red Hat、ResearchGate、Uber 和 Zalando。

## 歷史

2010 年，研究項目「Stratosphere：雲上的信息管理」（由德國研究基金會（DFG）資助）由柏林工業大學、柏林洪堡大學和哈索・普拉特納研究院合作啟動。Flink 從 Stratosphere 的分布式執行引擎的一個分支開始，於 2014 年 3 月成為 Apache 孵化器項目。2014 年 12 月，Flink 成為 Apache 頂級項目。

_發布日期_

* 08/2018: Apache Flink1.6（頁面存檔備份，存於網際網路檔案館） (09/2018: 1.6.1（頁面存檔備份，存於網際網路檔案館）;10/2018: 1.6.2（頁面存檔備份，存於網際網路檔案館）)
* 05/2018: Apache Flink1.5（頁面存檔備份，存於網際網路檔案館） (07/2018: 1.5.1（頁面存檔備份，存於網際網路檔案館）;07/2018: 1.5.2（頁面存檔備份，存於網際網路檔案館）;08/2018: 1.5.3（頁面存檔備份，存於網際網路檔案館）;09/2018: 1.5.4（頁面存檔備份，存於網際網路檔案館）;10/2018: 1.5.5（頁面存檔備份，存於網際網路檔案館）)
* 12/2017 年: Apache Flink1.4（頁面存檔備份，存於網際網路檔案館） (02/2018: 1.4.1（頁面存檔備份，存於網際網路檔案館）;03/2018: 1.4.2（頁面存檔備份，存於網際網路檔案館）)
* 06/2017: Apache Flink1.3（頁面存檔備份，存於網際網路檔案館） (06/2017: 1.3.1（頁面存檔備份，存於網際網路檔案館）;08/2017: 1.3.2（頁面存檔備份，存於網際網路檔案館）;03/2018: 1.3.3（頁面存檔備份，存於網際網路檔案館）)
* 02/2017: Apache Flink1.2（頁面存檔備份，存於網際網路檔案館） (04/2017: 1.2.1（頁面存檔備份，存於網際網路檔案館）)
* 08/2016: Apache Flink1.1（頁面存檔備份，存於網際網路檔案館） (08/2016: 1.1.1（頁面存檔備份，存於網際網路檔案館）;09/2016 v1。1.2（頁面存檔備份，存於網際網路檔案館）;10/2016 v1。1.3（頁面存檔備份，存於網際網路檔案館）;12/2016 v1。1.4（頁面存檔備份，存於網際網路檔案館）;03/2017 v1。1.5（頁面存檔備份，存於網際網路檔案館）)
* 03/2016: Apache Flink1.0（頁面存檔備份，存於網際網路檔案館） (04/2016: 1.0.1（頁面存檔備份，存於網際網路檔案館）;04/2016: 1.0.2（頁面存檔備份，存於網際網路檔案館）;05/2016 v1。0.3（頁面存檔備份，存於網際網路檔案館）)
* 11/2015: Apache Flink0.10（頁面存檔備份，存於網際網路檔案館） (11/2015: 0.10.1（頁面存檔備份，存於網際網路檔案館）;02/2016: 0.10.2（頁面存檔備份，存於網際網路檔案館）)
* 06/2015: Apache Flink0.9（頁面存檔備份，存於網際網路檔案館） (09/2015: 0.9.1（頁面存檔備份，存於網際網路檔案館）)
  * 04/2015: Apache Flink0.9 - 里程碑 - 1（頁面存檔備份，存於網際網路檔案館）

_Apache 孵化器發布日期_

* 01/2015: Apache Flink0.8 - 孵化（頁面存檔備份，存於網際網路檔案館）
* 11/2014: Apache Flink0.7 - 孵化（頁面存檔備份，存於網際網路檔案館）
* 08/2014: Apache Flink0.6 - 孵化（頁面存檔備份，存於網際網路檔案館） (09/2014: 0.6.1 - 孵化（頁面存檔備份，存於網際網路檔案館）)
* 05/2014: Stratosphere 0.5(06/2014:0.5.1;07/2014:0.5.2)

_Pre-Apache Stratosphere 發布日期_

* 01/2014: Stratosphere 0.4（0.3 版本被跳過）
* 08/2012: Stratosphere 0.2
* 05/2011: Stratosphere 0.1（08/2011:0.1.1）

## 參見

* Apache 軟體基金會項目列表
* 其他類似的數據處理引擎，如 Storm 和 Spark。
* Apache Beam，一種共享編程模型，Flink 是其創始後端。

## 參考文獻

## 外部連結

* 官方網站