一、Flink的特点

作为一个高性能的主流中间件,flink有以下特点。

  • 批流一体:统一批处理、流处理:flink处理数据是多样化的,既可以处理批数据,就是把数据攒起来处理,也可以处理流式的数据。
  • 分布式:Flink程序可以运行在多台机器上,搭建flink集群,可以把一个任务分散开,数据分布到不同的机器中去运行,多个机器分散运行一部分,最后汇总结果。
  • 高性能:处理性能比较高,性能很高,处理速度快。
  • 高可用:Flink支持高可用性(HA),flingk内部做处理,当分布式的数据其中一个坏了,宕机了,集群会把宕机的那台数据转移到好的机器上去运行,保证一个高可用性。
  • 准确:Flink可以保证数据处理的准确性

二、Flink的架构组成

1、Flink核心组成

yarn flink集群重启 flink集群模式_java


我们看到flink的组成大概分为了四层。从下到上依次是:

  • Deploy部署层:
    – 可以启动单个JVM,让Flink以Local模式运行
    – Flink也可以以Standalone 集群模式运行,Standalone 是flink自己管理集群,同时也支持Flink ON YARN,Flink应用直接提交到YARN上面运行。管理的意思就是集群中每一个机器的资源,内存分配等等。
    – Flink还可以运行在GCE(谷歌云服务)和EC2(亚马逊云服务),上云服务。
  • Core核心层::在Runtime之上提供了两套核心的API,DataStream API(流处理)和DataSet API(批处理)。在这一层提供了一些核心的API技术。这里其实就是计算引擎,所有的核心计算都在这一层。作用就是计算引擎。最早是批数据处理,后面数据量大了才有的流数据处理。
  • APIs & Libraries层:核心API之上又扩展了一些高阶的库和API。比如: CEP流处理,Table API和SQL,Flink ML机器学习库, Gelly图计算等高级功能,类似redis除了String还有GEO等等,估计是后面扩展的。

2、大数据和机器学习

大数据和机器学习有着千丝万缕的关系。一般的场景如下:

yarn flink集群重启 flink集群模式_flink_02


解释一下,开始我们有一堆原始数据,大量海量。模型训练就是一组公式,应用于这批数据上,最后分析出一个模型,也就是啥样的数据是啥样的特征得到一组特征。就是模型。

然后后面我们又来了一堆新数据,此时我们就能把之前训练好的模型拿出来应用上去,看看我们这些新的数据在这一组特征下是个啥结果,得到预测结果,模型就相当于前人的经验,拿经验来匹配后面的数据,预测他们的结果。有点抽象是吧,下面看个例子。

3、垃圾邮件案例

举个例子,我们现在有一大堆邮件,里面有垃圾邮件也有非垃圾邮件。然后我们在这堆数据上加一个算法,比如遍历,比如排序什么的、最后按照这个算法训练这堆数据,得到一个模型,模型里面存放着垃圾邮件的特征值和非垃圾邮件的特征值,后面我们又得到一堆邮件数据,然后我们根据前面大量数据汇算出来的特征值来匹配一下这些新数据那些是垃圾,那些是非垃圾。这就是一个预测结果,当然了预测结果可能有误差。

三、Flink的生态发展

下图是flink的一个生态发展图组成。

yarn flink集群重启 flink集群模式_flink_03

  • 中间部分主要内容在上面Flink核心组成中已经提到了。就是flink自己本身,其余的就是左侧的输入部分和右侧的输出部分。
  • 输入Connectors(左侧部分)
    这部分是外界数据进入flink的接入方式,包括流处理和批处理两种。
    流处理方式:包含Kafka(消息队列)、AWS kinesis(实时数据流服务)、RabbitMQ(消息队列)、NIFI(数据管道)、Twitter(API)
    批处理方式:包含HDFS(分布式文件系统)、HBase(分布式列式数据库)、Amazon S3(文件系统)、MapR FS(文件系统)、ALLuxio(基于内存分布式文件系统)
    以上都能作为数据接入方,把数据接入到flink。
  • 输出Connectors(右侧部分)
    flink处理完数据之后的输出也可以输出,包括以下几种。
    流处理方式:包含Kafka(消息队列)、AWS kinesis(实时数据流服务)、RabbitMQ(消息队列)、NIFI(数据管道)、Cassandra(NOSQL数据库)、ElasticSearch(全文检索)、HDFS rolling file(滚动文件)
    批处理方式:包含HBase(分布式列式数据库)、HDFS(分布式文件系统)
    可见不管是输出输入,flink都是支持批处理和流处理的,因为中间的flink自己就支持批处理和流处理,所以接入和输出都是支持的。