第一部分Flink概述

Flink

第一部分Flink概述

1、什么是Flink

Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。

  • Flink起源于2008年柏林理工大学的研究性项目Stratosphere

  • 2014年该项目被捐赠给了Apache软件基金会

  • Flink一跃成为Apache软件基金会的顶级项目之一

    在德语中,Flink一词表示快速和灵巧,项目采用一只松鼠的彩色图案作为logo,这不仅是因为松鼠具有快速和灵巧的特点,还因为柏林的松鼠有一种迷人的红棕色,而Flink的松鼠logo拥有可爱的尾巴,尾巴的颜色与Apache软件基金会的logo颜色相呼应,也就是说,这是一只Apache风格的松鼠。
    

2、Flink的特点

Flink 是一个开源的流处理框架,它具有以下特点

  • 批流一体:统一批处理、流处理
  • 分布式:Flink程序可以运行在多台机器上
  • 高性能:处理性能比较高
  • 高可用:Flink支持高可用性(HA)
  • 准确:Flink可以保证数据处理的准确性

3、Flink的应用场景

Flink主要应用于流式数据分析场景

  • 实时ETL

    集成流计算现有的诸多数据通道和SQL灵活的加工能力,对流式数据进行实时清晰、归并和结构化处理;同时,对离线数仓进行有效的补充和优化,并为数据实时传输提供可计算通道。

  • 实时报表

    实时化采集、加工流式数据存储;实时监控和展现业务、客户各类指标,让数据化运营实时化。

  • 监控预警

    对系统和用户行为进行实时监测和分析,以便及时发现危险行为

  • 在线系统

    实时计算各类数据指标,并利用实时结果及时调整在线系统的相关策略,在各类内容投放、智能推送领域有大量的应用

4、Flink的核心组成及生态发展

Flink核心组成

第一部分Flink概述_第1张图片

  • Deploy层:
    • 可以启动单个JVM,让Flink以Local模式运行
    • Flink也可以以Standalone 集群模式运行,同时也支持Flink ON YARN,Flink应用直接提交到YARN上面运行
    • Flink还可以运行在GCE(谷歌云服务)和EC2(亚马逊云服务)
  • Core层(Runtime):在Runtime之上提供了两套核心的API,DataStream API(流处理)和DataSet API(批处理)
  • APIs & Libraries层:核心API之上又扩展了一些高阶的库和API
    • CEP流处理
    • Table API和SQL
    • Flink ML机器学习库
    • Gelly图计算

Flink生态发展

  • 中间部分主要内容在上面Flink核心组成中已经提到

  • 输入Connectors(左侧部分)

    流处理方式:包含Kafka(消息队列)、AWS kinesis(实时数据流服务)、RabbitMQ(消息队列)、NIFI(数据管道)、Twitter(API)

    批处理方式:包含HDFS(分布式文件系统)、HBase(分布式列式数据库)、Amazon S3(文件系统)、MapR FS(文件系统)、ALLuxio(基于内存分布式文件系统)

  • 输出Connectors(右侧部分)

    流处理方式:包含Kafka(消息队列)、AWS kinesis(实时数据流服务)、RabbitMQ(消息队列)、NIFI(数据管道)、Cassandra(NOSQL数据库)、ElasticSearch(全文检索)、HDFS rolling file(滚动文件)

    批处理方式:包含HBase(分布式列式数据库)、HDFS(分布式文件系统)

5、Flink处理模型

Flink 专注于无限流处理,有限流处理是无限流处理的一种特殊情况

无限流处理:

  • 输入的数据没有尽头,像水流一样源源不断
  • 数据处理从当前或者过去的某一个时间 点开始,持续不停地进行

有限流处理:

  • 从某一个时间点开始处理数据,然后在另一个时间点结束

  • 输入数据可能本身是有限的(即输入数据集并不会随着时间增长),也可能出于分析的目的被人为地设定为有限集(即只分析某一个时间段内的事件)

    Flink封装了DataStream API进行流处理,封装了DataSet API进行批处理。

    同时,Flink也是一个批流一体的处理引擎,提供了Table API / SQL统一了批处理和流处理

6、流处理引擎的技术选型

市面上的流处理引擎不止Flink一种,其他的比如Storm、SparkStreaming、Trident等,实际应用时如何进行选型,给大家一些建议参考

  • 流数据要进行状态管理,选择使用Trident、Spark Streaming或者Flink
  • 消息投递需要保证At-least-once(至少一次)或者Exactly-once(仅一次)不能选择Storm
  • 对于小型独立项目,有低延迟要求,可以选择使用Storm,更简单
  • 如果项目已经引入了大框架Spark,实时处理需求可以满足的话,建议直接使用Spark中的Spark Streaming
  • 消息投递要满足Exactly-once(仅一次),数据量大、有高吞吐、低延迟要求,要进行状态管理或窗口统计,建议使用Flink

你可能感兴趣的:(flink,大数据,java)