这是我参与「第四届青训营 」笔记创作活动的第2天
[第四届青训营笔记创作活动]
Flink概述
介绍流计算引擎之前需要介绍什么是大数据,业内通常的说法是,大数据是无法在一定时间内用常规软件对其进行获取、存储、管理和处理的数据集合。大数据架构的发展历史如下图所示
其中Spark相较于Hadoop有更高阶的SQL API,逐渐替代了Hadoop,由于实际业务对计算实时性要求变高,因此流处理框架Flink逐渐变为主流。现有的流计算框架对比如下所示
Flink整体架构
Filink的生态架构如下图所示,其中中间的框是flink内部架构部分。
分层架构
- SDK层,主要有三类,SQL/TABLE,Datastream,Python
- 执行引擎层:提供统一的DAG,用来描述数据处理的pipeline,无论是流还是批都会转化为DAG,不同机器之间数据传输通过huffle service
- 状态存储层
- 资源调度层
整体架构
一个Flink集群的两个核心组件
- Job Manager:负责整个任务的协调工作,包括调度Task,触发协调Task做checkpoint,协调容错。
- Task Manager:负责执行一个Dataflow Graph的各个Task和data stream的buffer和数据交换。
Flink作业实例
从kafka中读取数据流,每10s统计一次单词出现次数。DataStream如下
逻辑转化为如下的stream data flow
Flink的流批一体原理
传统的架构如下所示,流处理和批处理是两条链路。
传统架构存在如下痛点:
- 人力成本较高,批处理流处理两套相同逻辑的系统要重复开发。
- 数据链路冗余,本身计算内容一致,造成资源浪费
- 数据口径不一致,两套系统,会产生不同程度的误差。
Flink将批处理看作是一种特殊的流处理,即有限的流处理。所以无论是无边界的数据流还是有边界的数据流,Flink都可以天然的支持。主要通过下面几个模块进行支持:
- SQL层
- Datastream API层,批和流都可以用该API开发。
- Scheduler层架构统一,将逻辑图DAG转化为调度任务Task。
- Failover recovery层统一
- Shuffle service层架构统一,流批场景选择不同的Shuffle service
针对批处理和流处理,Flink1.12版本之前的Scheduler有如下两种调度方式。