Flink之大数据计算框架的特性分析

Apache Flink

Flink以数据并行和流水线方式执行任意流数据程序,Flink的流水线运行时系统可以执行批处理和流处理程序。

Flink框架的主要特征包括:

  • 高吞吐&低延时(真·流处理)
  • 高可靠性(状态存储)
  • 支持流处理、批处理,还提供CEP(复合事件处理)、ML(机器学习)、SQL的API(All in One)

Flink组件栈
在这里插入图片描述

API支持

  • 对Streaming数据类应用,提供DataStream API
  • 对批处理类应用,提供DataSet API(支持Java/Scala)

整合支持

  • 支持Flink on YARN
  • 支持HDFS
  • 支持来自Kafka的输入数据
  • 支持Apache HBase
  • 支持Hadoop程序
  • 支持Tachyon
  • 支持ElasticSearch
  • 支持RabbitMQ
  • 支持Apache Storm
  • 支持S3
  • 支持XtreemFS

Spark与Flink拥有类似功能,两者主要区别包括:
Spark处理数据的单位是一批而不是单条,而数据采集却是逐条进行的,本质上是micro-batch的处理方式。因此 Spark Streaming系统需要设置间隔使得数据汇总到一定的量后再一并操作,这个间隔就是批处理间隔。
Flink 的基本数据模型是数据流,及事件(Event) 的序列。数据流作为数据的基本模型可能没有表或者数据块直观熟悉,但是可以证明是完全等效的。流可以是无边界的无限流,即一般意义上的流处理。也可以是有边界的有限流,这样就是批处理。
基于不同的底层数据模型,Flink能提供毫秒级的实时处理,Spark能提供秒级的实时处理。

Flink Streaming特性
高吞吐率和低延迟
Flink 的流处理引擎只需要很少配置就能实现高吞吐率和低延迟。下图展示了一个分布式计数的任务的性能,包括了流数据 shuffle 过程。
在这里插入图片描述

支持 Event Time 和乱序事件

Flink 支持了流处理和 Event Time 语义的窗口机制,Event time 使得计算乱序到达的事件或可能延迟到达的事件更加简单。Event Time的时间包括:

  • Processing Time
  • Event Time
  • Ingestion Time
    在这里插入图片描述

状态计算的Exactly-once

流程序可以在计算过程中维护自定义状态,Flink 的 checkpointing 机制保证了即时在故障发生下也能保障状态的 exactly once 语义。

在这里插入图片描述

灵活的时间窗口
Flink 支持在时间窗口,统计窗口,session 窗口,以及数据驱动的窗口,窗口可以通过灵活的触发条件来定制,以支持复杂的流计算模式。
在这里插入图片描述

带反压的连续流模型
数据流应用执行的是不间断的(常驻)operators。

Flink streaming 在运行时有着天然的流控:慢的数据 sink 节点会反压(backpressure)快的数据源(sources)。
在这里插入图片描述

容错性
Flink 的容错机制是基于 Chandy-Lamport distributed snapshots 来实现的。

这种机制是非常轻量级的,允许系统拥有高吞吐率的同时还能提供强一致性的保障
在这里插入图片描述

Batch 和 Streaming 一个系统流处理和批处理共用一个引擎
Flink 为流处理和批处理应用公用一个通用的引擎。批处理应用可以以一种特殊的流处理应用高效地运行。
在这里插入图片描述

内存管理
Flink 在 JVM 中实现了自己的内存管理。

应用可以超出主内存的大小限制,并且承受更少的垃圾收集的开销

在这里插入图片描述

迭代和增量迭代
Flink 具有迭代计算的专门支持(比如在机器学习和图计算中)。

增量迭代可以利用依赖计算来更快地收敛。
在这里插入图片描述

自动调优
批处理程序会自动地优化一些场景,比如避免一些昂贵的操作(如 shuffles 和 sorts),还有缓存一些中间数据。
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章