【IT168 评论】Apache Flink是一个用于大数据处理的Apache项目。虽然它看起来像Apache Spark,但二者在架构和想法上有很大差异。Apache Flink的目标是实时处理流数据。Apache Spark被认为是功能成熟的实时处理架构的先驱,它的微批处理架构支持近实时(NRT)场景,而Apache Flink支持实时的。
Apache Flink以前叫Stratosphere,是用Java写的,但是一直不温不火,近几年经过改良,加入了很多用scala写的功能,知乎上很多网友认为Apache Flink是模(chao)仿(xi)Apache Spark,如果真是这样,就像是上学时代那个天天抄你的答案却比你分高的同桌一样,Apache Flink可能会比Spark更具发展前景。
Apache Flink原本的定义是高吞吐量和低延迟的流处理框架,它也支持批处理。该架构是其他大数据处理架构的翻转,其中主要的概念是批处理框架。这是很多公司在过去十年一直在寻找的东西,也是要求低延迟甚至毫秒延迟都可能导致严重后果的应用平台所需要的。Apache Flink的前景似乎很不错,看起来像流处理的终极框架。
“我认为流式数据分析是Flink最主要的特性。由于其流水线的架构,Flink是Apache堆栈中大数据流处理的最完美搭档。”,柏林技术大学数据库系统和信息管理小组教授Volker Markl说道。
Apache Flink的核心是运行时,架构图如下所示:
Runtime是Flink的核心,一个分布式流式数据流引擎,提供数据分发和通信。流式数据流引擎将每个程序解释为数据流图。
Flink的一些核心特性是:
1、将所有内容作为流执行,并实时处理数据行。
2、支持迭代执行,并遵循分布式数据流方法,这对于实现大数据分析至关重要。
3、引擎是多功能的,允许执行现有的MapReduce或Storm应用程序。
4、它有流和批处理流程的优化器。
5、内存管理由引擎自动优化和管理。
在Runtime之上,有用于Stream处理的DataStream API和用于批处理的DataSet API。 还有关于DatasStream的特定API和库,以及DataSet API的描述:
1、Table API支持对数据使用SQL查询。它们很容易嵌入在DataStream和DataSets API中,并支持关系运算符(如选择,聚合和连接)的使用。
2、Flink ML,是Flink的机器学习库,提供了机器学习Pipelines API并实现了多种机器学习算法。它可通过DataSet API执行机器学习任务,它使用户能够编写ML管道,使其更容易处理机器学习工作流程。ML管道将ML流的不同步骤绑定在一起,使其有效地在生产环境中准备和部署模型。
3、Gelly,Flink的图计算库,提供了图计算的相关API及多种图计算算法实现。它提供了一组操作符来创建和修改图形,图形由边缘的DataSet和顶点的DataSet表示。Gelly仅适用于DataSet API,并且只能用于批处理。
4、Flink CEP是Flink的复杂事件处理库。它允许用户快速检测无尽数据流中的复杂事件模式。Flink CEP仅可用于通过DataStream API的流处理。
此外,Flink也可以方便地和Hadoop生态圈中其他项目集成,例如Flink可以读取存储在HDFS或HBase中的静态数据,以Kafka作为流式的数据源,直接重用MapReduce或Storm代码,或是通过YARN申请集群资源等。
以下是其与Apache Spark的一些关键差异:
1、流处理:Spark是一个面向批处理的系统,它对数据块(称为RDD)进行操作,但Apache Flink是一个能够实时处理行的流处理系统。
2、迭代:通过利用其流架构,Flink允许本地迭代数据,Spark只支持批处理。
3、内存管理:Spark必须优化和适应特定的数据集,因为如果你想要得到正确的结果,你需要手动控制分区和缓存。
4、成熟:Flink仍处于起步阶段,只有少量生产部署案例,而Spark已经相当成熟了。
5、数据流:与过程式编程范例相反,Flink遵循分布式数据流方法。除了事务的常规输入之外还需要中间结果的数据集操作,广播变量用于将预先的计算结果分发给所有工作节点。
Apache Flink不像Apache Spark那么成熟,因为它相对较新,生产部署案例也很少。然而,凭借其强大的流处理功能,它还是被视为下一代大数据分析的非常好的框架。