Flink学习知识分享一(VS Spark、适用场景、基本概念)

文章目录

      • 1.Flink VS Spark
          • 1.1定位
          • 1.2数据模型:
          • 1.3处理模型:
          • 1.4抽象层次:
          • 1.5内存管理:
          • 1.6支持的语言:
          • 1.7SQL的支持
          • 1.8外部数据源
      • 2.适用场景
          • 2.1Event-driven Applications(事件驱动程序)
          • 2.2Data Analytics Applications(数据分析程序)
          • 2.3Data Pipeline Applications(数据管道程序)
      • 3.基本概念
          • 3.1层级API
          • 3.2程序和数据流
          • 3.3并行数据流
          • 3.4窗口
          • 3.5时间
          • 3.6Stateful Operations(有状态的操作)
          • 3.7检查点和容错
          • 3.8基于流的批处理

1.Flink VS Spark

Flink是基于流的有状态的计算。相对于Spark,Flink还是比较年轻,双方各有优势,取长补短。

1.1定位
  • Spark:流是批的特例
  • Flink:批是流的特例
1.2数据模型:
  • Spark:Rdd集合,依靠lineage做恢复,存在宽窄依赖
  • Flink:数据量和event的序列,依靠checkpoint做恢复,保证一致性,其次可以是来一条数据处理一条,传输到下一个节点,也可以优化成批次处理,其中ck(checkpoint)可以不用落盘,这样可以提高性能以及低延迟。
1.3处理模型:
  • Spark:支持各种数据处理,对机器学习迭代训练支持比较好(基于RDD本身模型)
  • Flink:有状态的计算,尤其API层级多样,支持丰富,主要是流计算的优势。
1.4抽象层次:
  • Spark:批流本质底层走的是一套API
  • Flink:DataStream和DataSet是两套完全不同的API
1.5内存管理:
  • Spark: 由java管理到tungsten来管理内存
  • Flink: 由Flink自身管理内存
1.6支持的语言:
  • Spark:Java、Scala、Python
  • Flink:Java、Scala
1.7SQL的支持

Spark的SQL支持比Flink更深

1.8外部数据源
  • Spark:非常的丰富,且支持自定义外部数据源
  • Flink:map/reduce 、InputFormat,也支持自定义Source

2.适用场景

2.1Event-driven Applications(事件驱动程序)
  • 定义:事件驱动程序是statefull app,通过checkpoints保证容错,拉取远程数据到本地做持久化存储。
  • 优势:读取本地数据而非远程数据库、分层体系中多个应用可以共享一个数据库
  • 如何支持:有些高级源语;支持time、window、processfunction;savepoints:一个一致的映像文件
  • 案列: 各种检测、web应用(社交应用)等
2.2Data Analytics Applications(数据分析程序)
  • 定义:无界处理、依赖内部state做flink故障恢复机制
  • 优势:降低数据处理延迟。
  • 如何支持:提供了标准的ANSI的sql接口,对于批处理和流处理提供了统一的语义
  • 案列:网络质量监控、大规模图分析等
2.3Data Pipeline Applications(数据管道程序)
  • 定义:类似于数据etl,但并非周期性操作,而是连续性操作,降低目标间数据移动的延迟
  • 优势:降低延迟,更加通用。
  • 如何支持:基于多层API结构以及多种多样的Connectors
  • 案列:电商的实时搜索的索引构建、电商的连续的ETL

3.基本概念

3.1层级API

最终的API是SQL,一切的计算如果不提供SQL框架,那么都不会受欢迎的。

  • ProcessFunction-》DataStream PAI/DataSet API-》Table API-》SQL
3.2程序和数据流

env-》Source-》transformations-》sink-》execute

3.3并行数据流
  • 本质即为并行和分布式的,一个流对应一个或者多个流的分区,每个操作符有一个或者多少个操作符的子任务
  • 支持两种重分发模式:一对一流(如map)、重新分发流(keyby、window等)
3.4窗口

无法计算流中所有元素,故需通过window去限定范围。窗口主要分为两大类,时间驱动窗口事件驱动窗口

3.5时间
  • Event Time:数据产生的时间
  • Ingestion time :数据摄入时间
  • Processing Time :数据处理的时间
3.6Stateful Operations(有状态的操作)

通过window等操作使一次操作可以跨过多个时间去操作信息,这些操作被称为有状态的操作。

3.7检查点和容错

Flink是通过Stream replay 和 CheckPoint实现容错的。

3.8基于流的批处理

流中有界数据即为批数据量,flink可处理流数据和批数据
特例:

  • 批处理不适用检查点保证容错,而是直接回放数据
  • DataSet API 并非KV索引的结构
  • DataSet API 引入的特殊的同步迭代只能在有界流上去实现

你可能感兴趣的:(Flink)