Apache Flink介绍

Apache Flink介绍

俗话说知子莫若父,要想了解一门技术就要看官方的介绍。Flink官网对Flink的介绍是这样的:算法

Apache Flink is a framework and distributed processing engine for stateful computations over unbounded and bounded data streams. Flink has been designed to run in all common cluster environments, perform computations at in-memory speed and at any scale.

额...看不懂。翻译过来就是:apache

apache flink是一个用于在无界和有界数据流上进行有状态计算的分布式处理框架和引擎。Flink被设计成能够在全部常见的集群环境中运行,之内存速度和任何规模执行计算。

彷佛太笼统了。接下来咱们就深刻的了解一下Flink到底是一个什么鬼。网络

数据架构的演变

要想了解Flink咱们还得从分布式计算的历史讲起,因此历史课时间到。架构

在国外一些社区,有不少人讲计算引擎分为了四代,虽然这并不能表明全部人的观点,可是咱们能够在这些分代中看出计算引擎的区别。框架

首先第一代的计算引擎,无疑就是Hadoop承载的MapReduce了。相信了解大数据的童鞋对MapReduce都不会陌生,它将计算分红两部分,一部分是Map阶段,一部分是Reduce阶段。这对于上层应用来讲就不得不拆分算法。若是是较为复杂的计算,甚至于不得不实现多个Job的串联,例如迭代计算。分布式

因为第一代计算引擎的弊端,催生了支持DAG ( Directed Acyclic Graph)框架的诞生。支持DAG框架的计算引擎被划分为了第二代计算引擎,好比Tez或Oozie。第二代计算引擎执行的大多数是批量任务。oop

前两代的计算引擎都是延迟较为严重,无法知足实时性要求比较高的需求。而以Spark为表明的第三代计算引擎很好的解决了这一问题。第三代计算引擎的特色主要是 Job 内部的 DAG 支持(不跨越Job),以及强调的实时计算。这里强调一点,这里的实时计算实质上是微批处理,并非真正意义上的实时处理。性能

接下来的第四代计算引擎实现了真正意义上的实时处理,这就是咱们今天介绍的Flink。固然Flink除了可以实现数据的实时处理外也很好的支持了批处理和DAG的运算。测试

迭代计算性能对比测试:Flink > Spark > Hadoop(MR)。迭代次数越多越明显,性能上Flink优于Spark和Hadoop最主要的缘由是Flink支持增量迭代,具备对迭代自动优化的功能。大数据

两种数据集和两种处理方式

有界数据与无界数据

Flink最大的特点就是它的流式处理方式。而在介绍Flink的流式处理咱们要先了解一下有界数据和无界数据,好,上图:

有界数据流(bounded stream):具备定义的开始点和结束点。

无界数据流(unbounded stream):有一个起点,但没有定义的终点。

无界数据集包括但不限于以下

  • 终端用户与APP或WEB交互的数据
  • 物理传感器采集的数据
  • 金融市场行情
  • 系统或机器日志

就现实来讲,在Flink出现以前因为处理方式的局限性,咱们一般会将一些无界数据流人为的切分红有界数据流,而后在基于有界数据流进行处理。

流处理与批处理

流处理(Streaming):只要有数据生成则立刻执行计算程序

批处理(Batch):在有限的时间内执行并运行到完成的处理,完成后释放计算资源

因而可知Spark Streaming实际上是批处理。

咱们可使用任一类型的处理模型来处理任一类型的数据集,但不必定是最优的方案。事实上在之前咱们一直在用批处理来处理无界数据集,甚至是如今依然在用。

多样的部署方式

Flink提供了多种集群搭建方式:

  • standalone cluster模式:不依赖于任何第三方资源管理器,Flink能够做为独立的集群运行
  • 基于第三方资源管理器:Flink与全部常见的集群资源管理器(如Hadoop YARN,Apache Mesos和Kubernetes集成)
  • Local模式:顾名思义,就是本地单机模式。

支持任意数据规模

Flink与全部的大数据计算框架同样,支持横向扩展。也就是说,理论上Flink能够支持无限量的CPU、内存、磁盘和网络IO。

相关文章
相关标签/搜索