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). 

外部链接

编辑