Apache Flink
Apache Flink是由Apache軟件基金會開發的開源流處理框架,其核心是用Java和Scala編寫的分散式流數據流引擎。[2][3]Flink以數據並列和管道方式執行任意流數據程式[4],Flink的管線化執行時系統可以執行批次處理和流處理程式。[5][6]此外,Flink的執行時本身也支援迭代演算法的執行。[7]
開發者 | Apache軟件基金會 |
---|---|
首次釋出 | 2011年5月 |
目前版本 |
|
原始碼庫 | |
程式語言 | Java和Scala |
作業系統 | 跨平台 |
類型 |
|
特許條款 | Apache特許條款 2.0 |
網站 | flink |
Flink提供高吞吐量、低延遲的流數據引擎[8]以及對事件-時間處理和狀態管理的支援。Flink應用程式在發生機器故障時具有容錯能力,並且支援exactly-once語意。[9]程式可以用Java、Scala[10]、Python[11]和SQL[12]等語言編寫,並自動編譯和最佳化[13]到在叢集或雲環境中執行的數據流程式。[14]
Flink並不提供自己的數據儲存系統,但為Amazon Kinesis、Apache Kafka、Alluxio、HDFS、Apache Cassandra和Elasticsearch等系統提供了數據源和接收器。[15]
開發
編輯Apache Flink是由Apache軟件基金會內的Apache Flink社區基於Apache特許條款2.0[16]開發的,該專案已有超過100位代碼提交者和超過460貢獻者。(頁面存檔備份,存於互聯網檔案館)
data Artisans(頁面存檔備份,存於互聯網檔案館)是由Apache Flink的創始人建立的公司。[17]目前,該公司已聘用了12個Apache Flink的代碼提交者。[18]
概述
編輯Apache Flink的數據流編程模型在有限和無限數據集上提供單次事件(event-at-a-time)處理。在基礎層面,Flink程式由流和轉換組成。 「從概念上講,流是一種(可能永無止境的)數據流記錄,轉換是一種將一個或多個流作為輸入並因此產生一個或多個輸出流的操作」。[19]
Apache Flink包括兩個核心API:用於有界或無界數據流的數據流API和用於有界數據集的數據集API。Flink還提供了一個表API,它是一種類似SQL的表達式語言,用於關係流和批次處理,可以很容易地嵌入到Flink的數據流和數據集API中。Flink支援的最高階語言是SQL,它在語意上類似於表API,並將程式表示為SQL查詢表達式。
編程模型和分散式執行時
編輯Flink程式在執行後被對映到流數據流[19],每個Flink數據流以一個或多個源(數據輸入,例如訊息佇列或檔案系統)開始,並以一個或多個接收器(數據輸出,如訊息佇列、檔案系統或資料庫等)結束。Flink可以對流執行任意數量的變換,這些流可以被編排為有向無環數據流圖,允許應用程式分支和合併數據流。
Flink提供現成的源和接收連接器,包括Apache Kafka、Amazon Kinesis、HDFS和Apache Cassandra等[15]。
Flink程式可以作為叢集內的分散式系統執行,也可以以獨立模式或在YARN、Mesos、基於Docker的環境和其他資源管理框架下進行部署[20]。
狀態:檢查點、儲存點和容錯
編輯Apache Flink具有一種基於分散式檢查點的輕量級容錯機制。[9] 檢查點是應用程式狀態和源流中位置的自動非同步快照。在發生故障的情況下,啟用了檢查點的Flink程式將在恢復時從上一個完成的檢查點恢復處理,確保Flink在應用程式中保持一次性(exactly-once)狀態語意。檢查點機制暴露應用程式代碼的介面,以便將外部系統包括在檢查點機制中(如打開和提交資料庫系統的事務)。
Flink還包括一種名為儲存點的機制,它是一種手動觸發的檢查點。[21]用戶可以生成儲存點,停止正在執行的Flink程式,然後從流中的相同應用程式狀態和位置恢復程式。 儲存點可以在不遺失應用程式狀態的情況下對Flink程式或Flink群集進行更新。從Flink 1.2開始,儲存點還允許以不同的並列性重新啟動應用程式,這使得用戶可以適應不斷變化的工作負載。
數據流API
編輯Flink的數據流API(頁面存檔備份,存於互聯網檔案館)支援有界或無界數據流上的轉換(如過濾器、聚合和窗口函數),包含了20多種不同類型的轉換,可以在Java和Scala中使用。[22]
有狀態流處理程式的一個簡單Scala範例是從連續輸入流發出字數並在5秒窗口中對數據進行分組的應用:
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.time.Time
case class WordCount(word: String, count: Int)
object WindowWordCount {
def main(args: Array[String]) {
val env = StreamExecutionEnvironment.getExecutionEnvironment
val text = env.socketTextStream("localhost", 9999)
val counts = text.flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } }
.map { WordCount(_, 1) }
.keyBy("word")
.timeWindow(Time.seconds(5))
.sum("count")
counts.print
env.execute("Window Stream WordCount")
}
}
Apache Beam - Flink Runner
編輯Apache Beam「提供了一種進階統一編程模型,允許(開發人員)實現可在在任何執行引擎上執行批次處理和流數據處理作業」。[23]Apache Flink-on-Beam執行器是功能最豐富的、由Beam社區維護的能力矩陣。[24]
data Artisans與Apache Flink社區一起,與Beam社區密切合作,開發了一個強大的Flink runner。[25]
數據集API
編輯Flink的數據集API(頁面存檔備份,存於互聯網檔案館)支援對有界數據集進行轉換(如過濾、對映、連接和分組),包含了20多種不同類型的轉換。[26] 該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。[27][28]
歷史
編輯2010年,研究專案「Stratosphere:雲上的資訊管理」[29](由德國研究基金會(DFG)資助[30])由柏林工業大學、柏林洪堡大學和哈索·普拉特納研究院合作啟動。Flink從Stratosphere的分散式執行引擎的一個分支開始,於2014年3月成為Apache孵化器專案。[31]2014年12月,Flink成為Apache頂級專案。[32][33][34][35]
版本 | 原始釋出的日期 | 最新版本 | 釋出日期 | |
---|---|---|---|---|
0.9 | 2015-06-24 | 0.9.1 | 2015-09-01 | |
0.10 | 2015-11-16 | 0.10.2 | 2016-02-11 | |
1.0 | 2016-03-08 | 1.0.3版 | 2016-05-11 | |
1.1 | 2016-08-08 | 1.1.5 | 2017-03-22 | |
1.2 | 2017-02-06 | 1.2.1 | 2017-04-26 | |
1.3 | 2017-06-01 | 1.3.3 | 2018-03-15 | |
1.4 | 2017-12-12 | 1.4.2 | 2018-03-08 | |
1.5 | 2018-05-25 | 1.5.5 | 2018-10-29 | |
1.6 | 2018-08-08 | 1.6.2 | 2018-10-29 | |
1.7 | 2018-11-30 | 1.7.2 | 2019-02-15 | |
格式: 舊版本 舊版本,仍被支援 目前版本 最新的預覽版 未來版本 |
釋出日期
- 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。[36]
- Apache Beam,一種共用編程模型,Flink是其創始後端。
參考文獻
編輯- ^ Release 1.20.0. 2024年8月1日 [2024年8月20日].
- ^ Apache Flink: Scalable Batch and Stream Data Processing. apache.org. [2018-12-17]. (原始內容存檔於2018-12-26).
- ^ apache/flink. GitHub. [2018-12-17]. (原始內容存檔於2019-01-28).
- ^ Alexander Alexandrov, Rico Bergmann, Stephan Ewen, Johann-Christoph Freytag, Fabian Hueske, Arvid Heise, Odej Kao, Marcus Leich, Ulf Leser, Volker Markl, Felix Naumann, Mathias Peters, Astrid Rheinländer, Matthias J. Sax, Sebastian Schelter, Mareike Höger, Kostas Tzoumas, and Daniel Warneke. 2014. The Stratosphere platform for big data analytics. The VLDB Journal 23, 6 (December 2014), 939-964. DOI
- ^ Ian Pointer. Apache Flink: New Hadoop contender squares off against Spark. InfoWorld. 2015-05-07 [2018-12-17]. (原始內容存檔於2018-10-23).
- ^ On Apache Flink. Interview with Volker Markl.. odbms.org. [2018-12-17]. (原始內容存檔於2018-10-23).
- ^ Stephan Ewen, Kostas Tzoumas, Moritz Kaufmann, and Volker Markl. 2012. Spinning fast iterative data flows. Proc. VLDB Endow. 5, 11 (July 2012), 1268-1279. DOI
- ^ Benchmarking Streaming Computation Engines at Yahoo!. Yahoo Engineering. [2017-02-23]. (原始內容存檔於2017-05-01).
- ^ 9.0 9.1 Paris Carbone; Gyula Fóra; Stephan Ewen; Seif Haridi; Kostas Tzoumas. Lightweight Asynchronous Snapshots for Distributed Dataflows. 2015. arXiv:1506.08603v1 .
- ^ Apache Flink 1.2.0 Documentation: Flink DataStream API Programming Guide. ci.apache.org. [2017-02-23]. (原始內容存檔於2017-02-23) (英語).
- ^ Apache Flink 1.2.0 Documentation: Python Programming Guide. ci.apache.org. [2017-02-23]. (原始內容存檔於2017-02-21) (英語).
- ^ Apache Flink 1.2.0 Documentation: Table and SQL. ci.apache.org. [2017-02-23]. (原始內容存檔於2017-02-23) (英語).
- ^ Fabian Hueske, Mathias Peters, Matthias J. Sax, Astrid Rheinländer, Rico Bergmann, Aljoscha Krettek, and Kostas Tzoumas. 2012. Opening the black boxes in data flow optimization. Proc. VLDB Endow. 5, 11 (July 2012), 1256-1267. DOI
- ^ Daniel Warneke and Odej Kao. 2009. Nephele: efficient parallel data processing in the cloud. In Proceedings of the 2nd Workshop on Many-Task Computing on Grids and Supercomputers (MTAGS '09). ACM, New York, NY, USA, Article 8, 10 pages. DOI
- ^ 15.0 15.1 Apache Flink 1.2.0 Documentation: Streaming Connectors. ci.apache.org. [2017-02-23]. (原始內容存檔於2017-02-21) (英語).
- ^ ASF Git Repos - flink.git/blob - LICENSE. apache.org. [2018-12-17]. (原始內容存檔於2017-10-23).
- ^ Team – data Artisans. data-artisans.com. [2017-02-23]. (原始內容存檔於2017-02-23) (美國英語).
- ^ Apache Flink: Community & Project Info. flink.apache.org. [2017-02-23]. (原始內容存檔於2017-02-21) (英語).
- ^ 19.0 19.1 Apache Flink 1.2.0 Documentation: Dataflow Programming Model. ci.apache.org. [2017-02-23]. (原始內容存檔於2017-02-21) (英語).
- ^ Apache Flink 1.2.0 Documentation: Distributed Runtime Environment. ci.apache.org. [2017-02-24]. (原始內容存檔於2017-02-21) (英語).
- ^ Apache Flink 1.2.0 Documentation: Distributed Runtime Environment - Savepoints. ci.apache.org. [2017-02-24]. (原始內容存檔於2017-02-21) (英語).
- ^ Apache Flink 1.2.0 Documentation: Flink DataStream API Programming Guide. ci.apache.org. [2017-02-24]. (原始內容存檔於2017-02-23) (英語).
- ^ Apache Beam. beam.apache.org. [2017-02-24]. (原始內容存檔於2017-02-25) (英語).
- ^ Apache Beam Capability Matrix. beam.apache.org. [2017-02-24]. (原始內容存檔於2017-02-25) (英語).
- ^ Why Apache Beam? A Google Perspective | Google Cloud Big Data and Machine Learning Blog | Google Cloud Platform. Google Cloud Platform. [2017-02-24]. (原始內容存檔於2017-02-25) (英語).
- ^ Apache Flink 1.2.0 Documentation: Flink DataSet API Programming Guide. ci.apache.org. [2017-02-24]. (原始內容存檔於2017-02-21) (英語).
- ^ Sessions | FlinkForward | 12-14 Sep 2016 | Berlin. 2016.flink-forward.org. [2017-02-24]. (原始內容存檔於2017-02-25) (美國英語).
- ^ Flink Forward » Flink Forward 2015. 2015.flink-forward.org. [2017-02-24]. (原始內容存檔於2017-01-27) (美國英語).
- ^ Stratosphere. stratosphere.eu. [2018-12-18]. (原始內容存檔於2018-12-24).
- ^ DFG - Deutsche Forschungsgemeinschaft -. dfg.de. [2018-12-18]. (原始內容存檔於2017-02-27).
- ^ Stratosphere. apache.org. [2018-12-18]. (原始內容存檔於2017-10-16).
- ^ Project Details for Apache Flink. apache.org. [2018-12-18]. (原始內容存檔於2017-02-08).
- ^ The Apache Software Foundation Announces Apache™ Flink™ as a Top-Level Project : The Apache Software Foundation Blog. apache.org. [2018-12-18]. (原始內容存檔於2018-12-18).
- ^ Will the mysterious Apache Flink find a sweet spot in the enterprise?. siliconangle.com. [2018-12-18]. (原始內容存檔於2016-12-28).
- ^
- ^ Benchmarking Streaming Computation Engines: Storm, Flink and Spark Streaming (PDF). IEEE. May 2016 [2018-12-18]. (原始內容存檔於2020-03-05).