Flink 简介1.1 Flink 的引入这几年大数据的飞速发展,出现了很多热门的开源社区,其中著名的有 Hadoop、Storm, 以及后来的 Spark,他们都有着各自专注的应用场景。Spark 掀开了内存计算的先河,也以 内存为赌注,赢得了内存计算的飞速发展。 Spark 的火热或多或少的掩盖了其他分布式计 算的系统身影。就像 Flink,也就在这个时候默默的发展着。 在国外一些社区,有很多人将大数据的计算引擎分成了 4 代,当然,也有很多人不会 认同。我们先姑且这么认为和讨论。首先第一代的计算引擎,无疑就是 Hadoop 承载的 MapReduce。这里大家应该都不会对 MapReduce 陌生,它将计算分为两个阶段,分别为 Map 和 Reduce。对于上层应用来说,就 不得不想方设法去拆分算法,甚至于不得不在上层应用实现多个 Job 的串联,以完成一个 完整的算法,例如迭代计算。由于这样的弊端,催生了支持 DAG 框架的产生。因此,支持 DAG 的框架被划分为第二 代计算引擎。如 Tez 以及更上层的 Oozie。这里我们不去细究各种 DAG 实现之间的区别, 不过对于当时的 Tez 和 Oozie 来说,大多还是批处理的任务。接下来就是以 Spark 为代表的第三代的计算引擎。第三代计算引擎的特点主要是 Job 内部的 DAG 支持(不跨越 Job),以及强调的实时计算。特点:批处理、流处理、SQL 高层 API 支持,自带 DAG 内存迭代计算、性能较之前大幅提升。==Flink 的诞生就被归在了第四代。==这应该主要表现在 Flink 对流计算的支持,以及更 一步的实时性上面。当然 Flink 也可以支持 Batch 的任务,以及 DAG 的运算。首先,我 们可以通过下面的性能测试初步了解两个框架的性能区别,它们都可以基于内存计算框架进 行实时计算,所以都拥有非常好的计算性能。经过测试,Flink 计算性能上略好。 特点:批处理、流处理、SQL 高层 API 支持,自带 DAG,流式计算性能更高、可靠性更高。测试环境:1.CPU:7000 个;2.内存:单机 128GB;3.版本:Hadoop 2.3.0,Spark 1.4,Flink 0.94.数据:800MB,8GB,8TB;5.算法:K-means:以空间中 K 个点为中心进行聚类,对最靠近它们的对象归类。通过 迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。6.迭代:K=10,3 组数据。Spark 和 Flink 全部都运行在 Hadoop YARN 上,性能为 Flink > Spark > Hadoop(MR), 迭代次数越多越明显,性能上,Flink 优于 Spark 和 Hadoop 最主要的原因是 Flink 支持 增量迭代,具有对迭代自动优化的功能。Flink 和 spark 的差异:1.2 什么是 FlinkFlink 起源于 Stratosphere 项目,Stratosphere 是在 2010~2014 年由 3 所地处柏 林的大学和欧洲的一些其他的大学共同进行的研究项目, 2014 年 4 月 Stratosphere 的 代码 被复制 并捐赠 给了 Apache 软件 基金会 , 参加 这个孵 化项目 的初始成 员是 Stratosphere 系统的核心开发人员,2014 年 12 月, Flink 一跃成为 Apache 软件基金 会的顶级项目。在德语中, Flink 一词表示快速和灵巧, 项目采用一只松鼠的彩色图案作 为 logo, 这不仅是因为松鼠具有快速和灵巧的特点, 还因为柏林的松鼠有一种迷人的红 棕色, 而 Flink 的松鼠 logo 拥有可爱的尾巴, 尾巴的颜色与 Apache 软件基金会的 logo 颜色相呼应, 也就是说, 这是一只 Apache 风格的松鼠。Flink 主页在其顶部展示了该项目的理念:“Apache Flink 是为分布式、高性能、随 时可用以及准确的流处理应用程序打造的开源流处理框架” 。Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink 被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。1.3 Flink 流处理特性
首先第一代的计算引擎,无疑就是 Hadoop 承载的 MapReduce。
由于这样的弊端,催生了支持 DAG 框架的产生。因此,支持 DAG 的框架被划分为第二 代计算引擎。
接下来就是以 Spark 为代表的第三代的计算引擎。
“Apache Flink 是为分布式、高性能、随 时可用以及准确的流处理应用程序打造的开源流处理框架” 。
Checkpoint、State、Time、 Window
Flink 将批处理( 即处理有 限的静态数据)视作一种特殊的流处理
Flink 分别提供了面向流式 处理的接口(DataStream API) 和面向批处理的接口(DataSet API)
Flink 提供了用于流处理的 DataStream API 和用 于批处理的 DataSetAPI。