流/批/OLAP 一体的 Flink 引擎介绍 | 青训营笔记

100 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第二天

流计算与批计算的比较

特性批计算流计算
数据范围有界数据无界数据
任务执行分批执行、有终止全部执行、无终止
延时小时级、天级秒级、分钟级
数据场景数据量超大数据、无法以流的形式交付数据以流的形式交付
资源消耗
数据质量要求低要求高
业务场景清算对账、报表生成、特征生成欺诈检测、实时风控、实时推荐
关注点可扩展性、吞吐、容错可扩展性、延迟、容错、消息一致性、消息持久性
处理语义仅有一次至少一次、至多一次、仅有一次
代表引擎MR SPARKStorm Spark streaming Flink Kafka streaming

Flink核心理念

Flink与其他流计算引擎的最大区别,就是状态管理。

Flink提供了内置的状态管理,可以把工作时状态存储在Flink内部,而不需要把它存储在外部系统。这样做的好处:

  • 降低了计算引擎对外部系统的依赖,使得部署、运维更加简单;
  • 对性能带来了极大的提升。

Flink核心概念- DataStream

image.png

DataStream: Flink用类DataStream来表示程序中的流式数据。用户可以认为它们是含有重复数据的不可修改的集合(collection),DataStream中元素的数量是无限的。从图中我们可以发现,对DataStream可以使用一些算子,例如KeyBy这样的算子,对它进行处理转换之后,它会转换成另外一种数据流,也称为keyedstream。那么基于keyedstream,我们进一步可以使用窗口算子,这主要是Flink程序设计中对数据流的一些处理方式。

Flink核心概念- DataSet

DataSet : Flink系统可对数据集进行转换(例如,过滤,映射,联接,分组),数据集可从读取文件或从本地集合创建。结果通过接收器( Sink)返回,接收器可以将数据写入(分布式)文件或标准输出(例如命令行终端)

Flink程序

image.png

Flink程序由Source、Transformation和Sink三部分组成,其中Source主要负责数据的读取,支持HDFS、kafka和文本等;Transformation主要负责对数据的转换操作; Sink负责最终数据的输出,支持HDFS、kafka和文本输出等。在各部分之间流转的数据称为流( stream ) 。

Flink程序运行图

image.png

Flink是一种master-Slave架构,它在启动的时候就会产生了JobManger以及TaskManager。事实上在Flink程序中还包含两个组件,这两个组件一个叫resource manager,主要负责了资源的调度与管理,另外一个称为Dispatcher。主要是用来进行client,要把JobManager进行分发公布。 首先是用户提交Flink程序,这个Flink程序就会转换成逻辑数据流图。客户端接收到逻辑数据流图之后,然后连同jar包以及一些依赖包就会提交给了JobManger,JobManger接收到逻辑数据流图之后会转成物理数据流图,这个物理数据流图是真实的可执行的,能够具体的将任务放置在TaskManager上,在TaskManager中会将它所拥有的资源划分成一个一个的TaskSlot。每个TaskSlot实际上就相当于是jvm,它的一个具体的线程。每个TaskSlot占用了TaskManager的一部分资源,这里的资源主要是以内存进行划分的,TaskSlot不对cpu的资源进行划分,因此没有对cpu的资源进行隔离。