Apache Flink学习研究
1 Apache Flink是什么?
Apache Flink是由Apache软件基金会中的Apache Flink社区根据Apache License 2.0开发的。该项目由超过25个提交者和超过340个贡献者推动。它是一个开源流处理框架。
Ververica(前身为data Artisans)是一家由Apache Flink最初的创建者创建的公司,并雇佣了许多目前Apache Flink的提交者。
2 Flink的技术特点是什么?
Apache Flink的核心是一个用Java和Scala编写的分布式流式数据流引擎,Flink以数据并行和流水线的方式执行任意数据流程序,Flink的流水线运行时系统可以执行批量/批处理和流处理程序,此外,Flink的运行时还原生支持迭代算法的执行。
Flink提供了一个高吞吐量、低延迟的流媒体引擎,以及对事件时处理和状态管理的支持。Flink应用在机器故障时具有容错性,并支持精确的只读语义程序可以用Java、Scala、Python和SQL编写,并自动编译和优化成为在集群或云环境中执行的数据流程序。
Flink并没有提供自己的数据存储系统,而是提供数据源和输出连接器,连接到Amazon Kinesis、Apache Kafka、Alluxio、HDFS、Apache Cassandra和ElasticSearch等系统。
Apache Flink的数据流编程模型在有限和无限的数据集上提供了一次事件处理。在基本层面上,Flink程序由流和变换组成。"从概念上讲,流是一个(潜在的永无止境的)数据记录流,变换是一种操作,它把一个或多个流作为输入,并产生一个或多个输出流作为结果"。
Apache Flink包括两个核心API:用于有界或无界数据流的DataStream API和用于有界数据集的DataSet API。Flink还提供了一个Table API,它是一种类似SQL的表达式语言,用于关系流和批处理,可以很容易地嵌入到Flink的DataStream和DataSet API中。Flink支持的最高级语言是SQL,它在语义上与Table API类似,将程序表示为SQL查询表达式。
执行时,Flink程序被映射到流式数据流上。 每个Flink数据流都以一个或多个源(数据输入,如消息队列或文件系统)开始,以一个或多个输出(数据输出,如消息队列、文件系统或数据库)结束。可以在流上执行任意数量的变换。这些流可以被安排成一个有方向的、非环形的数据流图,允许应用程序对数据流进行分支和合并。
Flink程序作为集群内的分布式系统运行,可以以独立模式部署,也可以在YARN、Mesos、基于Docker的设置上与其他资源管理框架一起部署。
Apache Flink包含了一个基于分布式检查点的轻量级容错机制,检查点是应用程序的状态和在源流中的位置的自动、异步快照。在发生故障的情况下,启用了检查点的Flink程序在恢复后,将从最后一个完成的检查点开始恢复处理,确保Flink在应用程序中保持精确的一次状态语义。检查点机制暴露了应用程序代码的钩子,将外部系统也纳入检查点机制中(比如与数据库系统打开和提交事务)。
Flink还包括一种叫做保存点的机制,这是一种手动触发的检查点,用户可以生成一个保存点,停止正在运行的Flink程序,然后从相同的应用状态和流中的位置恢复程序。保存点可以在不丢失应用程序状态的情况下对Flink程序或Flink集群进行更新 。从Flink 1.2开始,保存点还允许用不同的并行方式重新启动一个应用程序--允许用户适应不断变化的工作负载。
Flink的DataStream API可以对有界或无界的数据流进行转换(如过滤器、聚合、窗口函数)。 DataStream API包括20多种不同类型的转换,并在Java和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 "提供了一个先进的统一编程模型,允许(开发者)实现可以在任何执行引擎上运行的批处理和流式数据处理作业。"根据Beam社区维护的能力矩阵,Apache Flink-on-Beam运行器是功能最丰富的。
data Artisans与Apache Flink社区一起,与Beam社区密切合作,开发了一个Flink runner。
Flink的DataSet API实现了对有界数据集的转换(例如,过滤器、映射、连接、分组)。DataSet API包含了20多种不同类型的转换,该API可用Java、Scala和实验性的Python API。Flink的DataSet API在概念上与DataStream API相似。
Flink的Table API是一种类似SQL的表达式语言,用于关系流和批处理,可以嵌入Flink的Java和Scala DataSet和DataStream API中。Table API和SQL接口在关系型Table抽象上操作。表可以从外部数据源或现有的DataStreams和DataSets中创建。Table API支持关系运算符,如在Table上进行选择、聚合和连接。
表也可以用常规的SQL进行查询。 表API和SQL提供了同等的功能,可以在同一个程序中混合使用。当Table转换回DataSet或DataStream时,使用Apache Calcite对关系运算符和SQL查询定义的逻辑计划进行优化,并转化为DataSet或DataStream程序。
3 Flink社区活动
Flink Forward是一个关于Apache Flink的年度会议。第一届Flink Forward于2015年在柏林举行。为期两天的会议有来自16个国家的250多名与会者。会议分为两个轨道,其中有超过30个Flink开发者的技术演讲,另外一个轨道是Flink实践培训。
2016年,350名与会者加入了会议,40多名演讲者在3个平行轨道上进行了技术演讲。在第三天,与会者被邀请参加实践培训课程。
2017年,该活动也扩大到旧金山。会议当天专门就Flink在企业中的应用、Flink系统内部、与Flink的生态系统集成以及平台的未来等方面进行技术讲座。它包括主题演讲、工业界和学术界Flink用户的演讲以及Apache Flink的实践培训课程。
2020年,在COVID-19大流行之后,原本应该在旧金山举办的Flink Forward春季版被取消了。取而代之的是,会议以虚拟方式举办,从4月22日开始,4月24日结束,内容包括现场主题演讲、Flink用例、Apache Flink®内部结构以及其他关于流处理和实时分析的主题。
来自以下组织的发言人在Flink Forward会议上发表了演讲: 阿里巴巴、Amadeus、Bouygues Telecom、Capital One、Cloudera、Data Artisans、Deep.BI、EMC、爱立信、Eventador、Hortonworks、华为、IBM、谷歌、MapR、MongoDB、Netflix、New Relic、Otto Group、红帽、ResearchGate、Uber和Zalando。
- 点赞
- 收藏
- 关注作者
评论(0)