Apache Flink是一个开源流处理框架,由Apache软件基金会开发。它使用Java和Scala编写,核心是一个分布式流数据引擎,以数据并行和流水线方式执行任意流数据程序。Flink的流水线运行时系统可以执行批处理和流处理程序,并且支持迭代算法的执行。Flink提供高吞吐量、低延迟的流数据引擎,以及对事件-时间处理和状态管理的支持。Flink应用程序在发生机器故障时具有故障容许度能力,并且支持exactly-once语义。
开发信息
apache Flink是由Apache软件基金会内的Apache Flink社区基于Apache许可证2.0开发的,该项目已有超过100位代码提交者和超过460贡献者。data Artisans是由Apache Flink的创始人创建的公司。目前,该公司已聘用了12个Apache Flink的代码提交者。
产品简介
基本概述
Apache Flink的数据流编程模型在有限和无限数据集上提供单次事件(event-at-a-时间)处理。在基础层面,Flink程序由流和转换组成。
Apache Flink的API:有界或无界数据流的数据流API、用于有界数据集的数据集API、表API。
运行流程
Flink程序在执行后被映射到流数据流,每个Flink数据流以一个或多个源(数据输入,例如消息队列或文件系统)开始,并以一个或多个接收器(数据输出,如消息队列、文件系统或数据库等)结束。Flink可以对流执行任意数量的变换,这些流可以被编排为有向无环数据流图,允许应用程序分支和合并数据流。
数据源和接收器
Flink提供现成的源和接收连接器,包括Apache Kafka、Amazon Kinesis、hdfs和Apache Cassandra等。
Flink程序可以作为集群内的分布式系统运行,也可以以独立模式或在yarn、Mesos、基于Docker的环境和其他资源管理框架下进行部署。
产品状态
Flink检查点和故障容许度:检查点是应用程序状态和源流中位置的自动异步快照。在发生故障的情况下,启用了检查点的Flink程序将在恢复时从上一个完成的检查点恢复处理,确保Flink在应用程序中保持一次性(exactly-once)状态语义。检查点机制暴露应用程序代码的接口,以便将外部系统包括在检查点机制中(如打开和提交数据库系统的事务)。
Flink保存点的机制是一种手动触发的检查点。用户可以生成保存点,停止正在运行的Flink程序,然后从流中的相同应用程序状态和位置恢复程序。保存点可以在不丢失应用程序状态的情况下对Flink程序或Flink群集进行更新。
数据流API
Flink的数据流API支持有界或无界数据流上的转换(如过滤器、聚合和窗口函数),包含了20多种不同类型的转换,可以在Java和Scala中使用。
有状态流处理程序的一个简单Scala示例是从连续输入流发出字数并在5秒窗口中对数据进行分组的应用:
处理作业
Apache Beam“提供了一种高级统一编程模型,允许(开发人员)实现可在在任何执行引擎上运行批处理和流数据处理作业”。Apache Flink-on-Beam运行器是功能最丰富的、由Beam社区维护的能力矩阵。
data Artisans与Apache Flink社区一起,与Beam社区密切合作,开发了一个强大的Flink runner。
数据集API
Flink的数据集API支持对有界数据集进行转换(如过滤、映射、连接和分组),包含了20多种不同类型的转换。该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进行优化,并转换为数据集或数据流程序。
历史版本
参考资料
Apache Flink:引领流处理框架革新的开源项目.百度智能云.2024-03-23
Apache Flink .apache.2024-03-23