Apache Flink

一种用于在无界和有界数据流上进行有状态计算的框架和分布式处理引擎

Apache Flink是由Apache軟件基金會開發的開源流處理框架,其核心是用JavaScala編寫的分散式流數據流引擎。[2][3]Flink以數據並列管道方式執行任意流數據程式[4],Flink的管線化執行時系統可以執行批次處理和流處理程式。[5][6]此外,Flink的執行時本身也支援迭代演算法的執行。[7]

Apache Flink
開發者Apache軟件基金會
首次釋出2011年5月,​13年前​(2011-05
目前版本
  • 1.20.0(2024年8月1日;穩定版本)[1]
編輯維基數據連結
原始碼庫 編輯維基數據連結
程式語言JavaScala
作業系統跨平台
類型
特許條款Apache特許條款 2.0
網站flink.apache.org/ 編輯維基數據

Flink提供高吞吐量、低延遲的流數據引擎[8]以及對事件-時間處理和狀態管理的支援。Flink應用程式在發生機器故障時具有容錯能力,並且支援exactly-once語意。[9]程式可以用Java、Scala[10]Python[11]SQL[12]等語言編寫,並自動編譯和最佳化[13]到在叢集或雲環境中執行的數據流程式。[14]

Flink並不提供自己的數據儲存系統,但為Amazon KinesisApache KafkaAlluxioHDFSApache CassandraElasticsearch等系統提供了數據源和接收器。[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、HDFSApache 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「提供了一種進階統一編程模型,允許(開發人員)實現可在在任何執行引擎上執行批次處理和流數據處理作業」。[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頁面存檔備份,存於互聯網檔案館)是一個關於Apache Flink的年度會議。第一屆Flink Forward於2015年在柏林舉行。為期兩天的會議有來自16個國家的250多名與會者。 會議分為兩個部分,Flink開發人員提供30多個技術演示,另外還有一個Flink培訓實踐。

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

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

來自以下組織的發言人在Flink Forward會議上發表了演講:阿里巴巴集團Amadeus英語Amadeus IT GroupBouygues Telecom英語Bouygues Telecom第一資本Cloudera、data Artisans、EMC愛立信Hortonworks華為IBMGoogleMapRMongoDBNetflixNew Relic英語New RelicOtto Group英語Otto GmbHRed HatResearchGateUberZalando[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
格式:
舊版本
舊版本,仍被支援
目前版本
最新的預覽版
未來版本

釋出日期

Apache孵化器釋出日期

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)

參見

編輯

參考文獻

編輯
  1. ^ Release 1.20.0. 2024年8月1日 [2024年8月20日]. 
  2. ^ Apache Flink: Scalable Batch and Stream Data Processing. apache.org. [2018-12-17]. (原始內容存檔於2018-12-26). 
  3. ^ apache/flink. GitHub. [2018-12-17]. (原始內容存檔於2019-01-28). 
  4. ^ 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
  5. ^ Ian Pointer. Apache Flink: New Hadoop contender squares off against Spark. InfoWorld. 2015-05-07 [2018-12-17]. (原始內容存檔於2018-10-23). 
  6. ^ On Apache Flink. Interview with Volker Markl.. odbms.org. [2018-12-17]. (原始內容存檔於2018-10-23). 
  7. ^ 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
  8. ^ Benchmarking Streaming Computation Engines at Yahoo!. Yahoo Engineering. [2017-02-23]. (原始內容存檔於2017-05-01). 
  9. ^ 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 . 
  10. ^ Apache Flink 1.2.0 Documentation: Flink DataStream API Programming Guide. ci.apache.org. [2017-02-23]. (原始內容存檔於2017-02-23) (英語). 
  11. ^ Apache Flink 1.2.0 Documentation: Python Programming Guide. ci.apache.org. [2017-02-23]. (原始內容存檔於2017-02-21) (英語). 
  12. ^ Apache Flink 1.2.0 Documentation: Table and SQL. ci.apache.org. [2017-02-23]. (原始內容存檔於2017-02-23) (英語). 
  13. ^ 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
  14. ^ 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. ^ 15.0 15.1 Apache Flink 1.2.0 Documentation: Streaming Connectors. ci.apache.org. [2017-02-23]. (原始內容存檔於2017-02-21) (英語). 
  16. ^ ASF Git Repos - flink.git/blob - LICENSE. apache.org. [2018-12-17]. (原始內容存檔於2017-10-23). 
  17. ^ Team – data Artisans. data-artisans.com. [2017-02-23]. (原始內容存檔於2017-02-23) (美國英語). 
  18. ^ Apache Flink: Community & Project Info. flink.apache.org. [2017-02-23]. (原始內容存檔於2017-02-21) (英語). 
  19. ^ 19.0 19.1 Apache Flink 1.2.0 Documentation: Dataflow Programming Model. ci.apache.org. [2017-02-23]. (原始內容存檔於2017-02-21) (英語). 
  20. ^ Apache Flink 1.2.0 Documentation: Distributed Runtime Environment. ci.apache.org. [2017-02-24]. (原始內容存檔於2017-02-21) (英語). 
  21. ^ Apache Flink 1.2.0 Documentation: Distributed Runtime Environment - Savepoints. ci.apache.org. [2017-02-24]. (原始內容存檔於2017-02-21) (英語). 
  22. ^ Apache Flink 1.2.0 Documentation: Flink DataStream API Programming Guide. ci.apache.org. [2017-02-24]. (原始內容存檔於2017-02-23) (英語). 
  23. ^ Apache Beam. beam.apache.org. [2017-02-24]. (原始內容存檔於2017-02-25) (英語). 
  24. ^ Apache Beam Capability Matrix. beam.apache.org. [2017-02-24]. (原始內容存檔於2017-02-25) (英語). 
  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) (英語). 
  26. ^ Apache Flink 1.2.0 Documentation: Flink DataSet API Programming Guide. ci.apache.org. [2017-02-24]. (原始內容存檔於2017-02-21) (英語). 
  27. ^ Sessions | FlinkForward | 12-14 Sep 2016 | Berlin. 2016.flink-forward.org. [2017-02-24]. (原始內容存檔於2017-02-25) (美國英語). 
  28. ^ Flink Forward » Flink Forward 2015. 2015.flink-forward.org. [2017-02-24]. (原始內容存檔於2017-01-27) (美國英語). 
  29. ^ Stratosphere. stratosphere.eu. [2018-12-18]. (原始內容存檔於2018-12-24). 
  30. ^ DFG - Deutsche Forschungsgemeinschaft -. dfg.de. [2018-12-18]. (原始內容存檔於2017-02-27). 
  31. ^ Stratosphere. apache.org. [2018-12-18]. (原始內容存檔於2017-10-16). 
  32. ^ Project Details for Apache Flink. apache.org. [2018-12-18]. (原始內容存檔於2017-02-08). 
  33. ^ 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). 
  34. ^ Will the mysterious Apache Flink find a sweet spot in the enterprise?. siliconangle.com. [2018-12-18]. (原始內容存檔於2016-12-28). 
  35. ^
  36. ^ Benchmarking Streaming Computation Engines: Storm, Flink and Spark Streaming (PDF). IEEE. May 2016 [2018-12-18]. (原始內容存檔於2020-03-05). 

外部連結

編輯