俗话说知子莫若父,要想了解一门技术就要看官方的介绍。Flink官网对Flink的介绍是这样的:
额...看不懂。翻译过来就是:
似乎太笼统了。接下来我们就深入的了解一下Flink究竟是一个什么鬼。 数据架构的演变要想了解Flink我们还得从分布式计算的历史讲起,所以历史课时间到。 在国外一些社区,有很多人讲计算引擎分为了四代,虽然这并不能代表所有人的观点,但是我们可以在这些分代中看出计算引擎的区别。 首先第一代的计算引擎,无疑就是Hadoop承载的MapReduce了。相信了解大数据的童鞋对MapReduce都不会陌生,它将计算分成两部分,一部分是Map阶段,一部分是Reduce阶段。这对于上层应用来说就不得不拆分算法。如果是较为复杂的计算,甚至于不得不实现多个Job的串联,例如迭代计算。 由于第一代计算引擎的弊端,催生了支持DAG ( Directed Acyclic Graph)框架的诞生。支持DAG框架的计算引擎被划分为了第二代计算引擎,比如Tez或Oozie。第二代计算引擎执行的大多数是批量任务。 前两代的计算引擎都是延迟较为严重,没法满足实时性要求比较高的需求。而以Spark为代表的第三代计算引擎很好的解决了这一问题。第三代计算引擎的特点主要是 Job 内部的 DAG 支持(不跨越Job),以及强调的实时计算。这里强调一点,这里的实时计算实质上是微批处理,并不是真正意义上的实时处理。 接下来的第四代计算引擎实现了真正意义上的实时处理,这就是我们今天介绍的Flink。当然Flink除了能够实现数据的实时处理外也很好的支持了批处理和DAG的运算。 迭代计算性能对比测试:Flink > Spark > Hadoop(MR)。迭代次数越多越明显,性能上Flink优于Spark和Hadoop最主要的原因是Flink支持增量迭代,具有对迭代自动优化的功能。 两种数据集和两种处理方式有界数据与无界数据Flink最大的特色就是它的流式处理方式。而在介绍Flink的流式处理我们要先了解一下有界数据和无界数据,好,上图: 有界数据流(bounded stream):具有定义的开始点和结束点。 无界数据流(unbounded stream):有一个起点,但没有定义的终点。 无界数据集包括但不限于如下
就现实来说,在Flink出现之前由于处理方式的局限性,我们通常会将一些无界数据流人为的切分成有界数据流,然后在基于有界数据流进行处理。 流处理与批处理流处理(Streaming):只要有数据生成则马上执行计算程序 批处理(Batch):在有限的时间内执行并运行到完成的处理,完成后释放计算资源 由此可见Spark Streaming其实是批处理。 我们可以使用任一类型的处理模型来处理任一类型的数据集,但不一定是最优的方案。事实上在以前我们一直在用批处理来处理无界数据集,甚至是现在依然在用。 多样的部署方式Flink提供了多种集群搭建方式:
支持任意数据规模Flink与所有的大数据计算框架一样,支持横向扩展。也就是说,理论上Flink可以支持无限量的CPU、内存、磁盘和网络IO。 |
|