【01】Flink 之理论学习

x33g5p2x  于2021-12-25 转载在 其他  
字(2.4k)|赞(0)|评价(0)|浏览(525)

1.1 实时计算对比

  • Storm 延迟低但吞吐量小
  • Spark Streaming 吞吐量大但是延迟高
  • Flink 是一种兼具低延迟和高吞吐量特点的流式计算技术,还是一套框架中同时支持批处理和流处理的一个计算平台

  • 高吞吐、低延迟、高性能
  • 支持带事件时间的窗口(window)操作:time、count、session, data-driven
  • 支持有状态计算的exactly once语义
  • 支持具有反压功能的持续流模型
    反压功能:在Streaming中也有,就是参数的控制功能,比如双11时,当数据源,kafka中数据太多,实时计算处理不过来的时候,通过offset来压制数据读取的速度(要求:其中必须有消息队列,Streaming中的反压机制需要手动去调节)。
  • 支持基于轻量级分布式快照(snapshot)实现的容错
  • 同时支持batch on streaming处理和Streaming处理
  • Flink在JVM内部实现了自己的内存管理
    Spark在1.5版本之后实现了JVM内存管理。
  • 支持迭代计算
  • 支持程序自动优化:避免特定情况下shuffle、排序等昂贵操作,中间结果有必要时缓存
    避免特定情况下shuffle是区别于Spark很关键的一点,它是在代码提交的时候就会进行代码优化,剔除调冗余的没有意义的依赖关系,在提交代码的时候就已经处理好了,也就是还没有提交到AM的时候就已经处理好。Spark Streaming是在AM中处理的。

Manager进程
Flink 由两类运行时JVM进程管理分布式集群的计算资源。
(1)JobManager进行负责分布式任务管理,如任务调度、检查点、故障恢复等。在高可用HA 分布式部署时,系统中可以有多个JobManager,即一个leader加多个standby。 JobManager是Flink主从架构中的master。
(2)TashManager进程负责执行任务线程,以及缓存和传输stream。TaskManager是Flink主从架构中的worker。
此外,作为作业的发起者,客户端(client)向JobManager提交作业,但客户端不是Flink运行时的一部分。

1.3.1 Flink运行的三种模式

  1. Local
  • Cluster

  • Standalone

  • YARN

  • Cloud

Runtime:分布式Streaming Dataflow
Flink 和 Spark Streaming 不同之处:
Spark Core 和 Spark Streaming 最后都是运行在 RDD 上,是基于RDD的操作。
Flink Stream 处理:
DataStream API
Flink Batch 处理:
DataSet API

同spark—样,Flink也有Flink Core (runtime层)来统一支持流处理和批处理
Flink Core (runtime层):是一个分布式的流处理引擎,提供了支持Fl ink计算的全部核心实
现。

  • 支持分布式流处理
  • JobGraph到ExecutionGraph的映射、调度,为上层API层提供基础服务

Flink API层:实现面向Stream的流处理和面向batch的批处理API
特定应用领域库:

  • Flink ML:提供机器学习Pipelines API并实现多种机器学习算法python scikit-learn
  • 图计算库Geliy:提供了图计算相关API和多种图计算算法实现

1.4.1 API类型

  • DataSet:对静态数据讲行批处理操作、将静态数据抽象分布式数据集,使用
    Flink各种操作符处理数据集,支持Java、Scala、Python
  • Datastream:对数据进行流处理操作,将流式的数据抽象成分布式数据流,用Flink各种操作符处理数据流,支持Java、Scala
  • Table API:对结构化数据进行查询操作,将结构化数据抽象成关系表。并通过类SQL的DSL对关系表进行各种查询操作,支持Java、Scala

1.4.2 数据集

数据集:

  • 无界数据持续—圻,不停流入数据(交易日志、 诂点击日志)
  • 有界数据集:批次的,类似MapReduce处理的数据集

数据处理模型:

  • 流处理:实时任务,任务一直运行,处理无界数据
  • 批处理:批处理有界数据,有界数据代表数据是有限集合

Flink:将有界数据集当做无界数据集的一种特例
Spark Streaming:把无界数据集分割成有界,通过微批的方式对待流计算

1.5.1 Flink数据处理组件

简单实现 Word Count 的流处理程序,其 StreamGraph 的形象表示:

Flink API 图解:

任务执行:

  • runtime层以JobGraph形式接收程序。JobGraph即为一个一般化的并行数据流图(data
    flow
    ),它拥有任意数量的Task来接收和产生data stream、
  • DataStream API和DataSet API都会使用单独编译的处理方式生成JobGraph。 DataSet
    API使用optimizer来决定针对程序的优化方法,而DataStream API则使用stream builder
    来完成该任务
  • 在执行JobGraph时,Flink提供了多种候选部署方案(如local, remote, YARN等)。
  • Flink附随了 一些产生DataSet或DataStream API程序的的类库和API:处理逻辑表查询
    的Table,机器学习的FlinkML,图像处理的Geliy,复杂事件处理的CEP。

1.5.2 Streaming Dataflow

  • Flink程序实际执行,映射到流式数据流(Streaming Dataflow),有流和转化符构成。
  • Stream类型RDD是一种数据集。可以从Source中来,也可以从别的Transformation转化而来。
  • Flink Transformation和Spark算子基本一致。

相关文章