Apache Flink学习研究

举报
Jet Ding 发表于 2020/09/29 14:57:50 2020/09/29
【摘要】 Apache Flink的核心是一个用Java和Scala编写的分布式流式数据流引擎

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的核心是一个用JavaScala编写的分布式流式数据流引擎Flink数据并行和流水线的方式执行任意数据流程序Flink的流水线运行时系统可以执行批量/批处理和流处理程序,此外,Flink的运行时还原生支持迭代算法的执行。

Flink提供了一个高吞吐量、低延迟的流媒体引擎,以及对事件时处理和状态管理的支持Flink应用在机器故障时具有容错性,并支持精确的只读语义程序可以用JavaScalaPythonSQL编写,并自动编译和优化成为在集群或云环境中执行的数据流程序

Flink并没有提供自己的数据存储系统,而是提供数据源和输出连接器,连接到Amazon KinesisApache KafkaAlluxioHDFSApache CassandraElasticSearch等系统。

Apache Flink数据流编程模型在有限和无限的数据集上提供了一次事件处理。在基本层面上,Flink程序由流和变换组成。"从概念上讲,流是一个(潜在的永无止境的)数据记录流,变换是一种操作,它把一个或多个流作为输入,并产生一个或多个输出流作为结果"

Apache Flink包括两个核心API:用于有界或无界数据流的DataStream API和用于有界数据集的DataSet APIFlink还提供了一个Table API,它是一种类似SQL的表达式语言,用于关系流和批处理,可以很容易地嵌入到FlinkDataStreamDataSet API中。Flink支持的最高级语言是SQL,它在语义上与Table API类似,将程序表示为SQL查询表达式。

执行时,Flink程序被映射到流式数据流上。 每个Flink数据流都以一个或多个源数据输入,如消息队列或文件系统)开始,以一个或多个输出数据输出,如消息队列、文件系统或数据库)结束。可以在流上执行任意数量的变换。这些流可以被安排成一个有方向的、非环形的数据流图,允许应用程序对数据流进行分支和合并

Flink程序作为集群内的分布式系统运行,可以以独立模式部署,也可以在YARNMesos、基于Docker的设置上与其他资源管理框架一起部署

Apache Flink包含了一个基于分布式检查点的轻量级容错机制检查点是应用程序的状态和在源流中的位置的自动、异步快照。在发生故障的情况下,启用了检查点的Flink程序在恢复后,将从最后一个完成的检查点开始恢复处理确保Flink在应用程序中保持精确的一次状态语义检查点机制暴露了应用程序代码的钩子,将外部系统也纳入检查点机制中(比如与数据库系统打开和提交事务)

Flink还包括一种叫做保存点的机制,这是一种手动触发的检查点,用户可以生成一个保存点,停止正在运行的Flink程序,然后从相同的应用状态和流中的位置恢复程序。保存点可以在不丢失应用程序状态的情况下对Flink程序或Flink集群进行更新 。从Flink 1.2开始,保存点还允许用不同的并行方式重新启动一个应用程序--允许用户适应不断变化的工作负载

FlinkDataStream API以对有界或无界的数据流进行转换(如过滤器、聚合、窗口函数)。 DataStream API包括20多种不同类型的转换,并在JavaScala中可用。

下面一个有状态流处理程序的简单例子是从一个连续的输入流中发出一个字数,并在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 ArtisansApache Flink社区一起,与Beam社区密切合作,开发了一个Flink runner

FlinkDataSet API实现了对有界数据集的转换(例如,过滤器、映射、连接、分组)。DataSet API包含了20多种不同类型的转换,该API可用JavaScala和实验性的Python APIFlinkDataSet API在概念上与DataStream API相似。

FlinkTable API一种类似SQL的表达式语言,用于关系流和批处理,可以嵌入FlinkJavaScala DataSetDataStream API中。Table APISQL接口在关系型Table抽象上操作。表可以从外部数据源或现有的DataStreamsDataSets中创建。Table API支持关系运算符,如在Table上进行选择、聚合和连接。

表也可以用常规的SQL进行查询 APISQL提供了同等的功能,可以在同一个程序中混合使用。当Table转换回DataSetDataStream时,使用Apache Calcite对关系运算符和SQL查询定义的逻辑计划进行优化,并转化为DataSetDataStream程序。

3      Flink社区活动

Flink Forward是一个关于Apache Flink的年度会议。第一届Flink Forward2015年在柏林举行。为期两天的会议有来自16个国家的250多名与会者。会议分为两个轨道,其中有超过30Flink开发者的技术演讲,另外一个轨道是Flink实践培训。

2016年,350名与会者加入了会议,40多名演讲者在3个平行轨道上进行了技术演讲。在第三天,与会者被邀请参加实践培训课程。

2017年,该活动也扩大到旧金山。会议当天专门就Flink在企业中的应用、Flink系统内部、与Flink的生态系统集成以及平台的未来等方面进行技术讲座。它包括主题演讲、工业界和学术界Flink用户的演讲以及Apache Flink的实践培训课程。

2020年,在COVID-19大流行之后,原本应该在旧金山举办的Flink Forward春季版被取消了。取而代之的是,会议以虚拟方式举办,从422日开始,424日结束,内容包括现场主题演讲、Flink用例、Apache Flink®内部结构以及其他关于流处理和实时分析的主题。

来自以下组织的发言人在Flink Forward会议上发表了演讲阿里巴巴、AmadeusBouygues TelecomCapital OneClouderaData ArtisansDeep.BIEMC、爱立信、EventadorHortonworks、华为、IBM、谷歌、MapRMongoDBNetflixNew RelicOtto Group、红帽、ResearchGateUberZalando

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。