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

75 阅读4分钟

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

1.Flink概述

1.1Apache Flink 诞生背景

业内对大数据的实时性提出更高的要求 大数据:指无法在一定时间内用常规工具对其进行获取,存储,管理和处理的数据集合。

  • 其特点有:海量化,多样化,快速化,价值化。

大数据实时性带来的价值:监控场景,金融风控,实时推荐。。。

批式计算流式计算
离线计算,非实时;静态数据集;小时/天等周期计算实时计算,快速,低延迟;无限流,动态,无边界;持续运行;流批一体

1.2 Flink的优势

  1. Flink 通过实现了 Google Dataflow 流式计算模型实现了高吞吐、低延迟、高性能兼具实时流式计算框架。
  2. flink 支持高度容错的状态管理,防止状态在计算过程中因为系统异常而丢失,flink 周期性地通过分布式快照技术 Checkpoints 实现状态的持久化维护,使得即使在系统停机或者异常情况下都能计算出正确的结果。
  3. 流批一体
  4. 状态计算的 exactly-once 语义,流程序可以在计算过程中维护自定义状态。Flink 的 checkpointing 机制保证了即时在故障发生下也能保障状态的 exactly once 语义。

2. Flink整体框架

2.1Flink分层架构

Flink各个模块的用途

Flink分层框架.png

2.2Flink总体架构

Flink总统框架.jpg 一个 Flink 集群,主要包含以下两个核心组件:

  1. JobManager ( JM ):负责整个任务的协调工作,包括:调度 task 、触发协调 Task 做 Checkpoint 、协调容错恢复等;
  2. TaskiManager( TM ):负责执行一个 DataFlow Graph 的各个 task 以及 data streams 的 buffer 和数据交换。

Flink框架.png

  • Dispatcher :接收作业,拉起 JobManager 来执行作业,并在 JobMaster 挂掉之后恢复作业;
  • JobMaster :管理一个 job 的整个生命周期,会向 ResourceManager 申请 slot ,并将 task 调度到对应 TM 上;
  • ResourceManager :负责 slot 资源的管理和调度, Task manager 拉起之后会向 RM 注册;

2.3Flink作业示例

示例:从Kafka中读取一个实时数据流,每10s统计一次单词出现数,datastream实现代码如下: image.png

2.4Flink如何做到流批一体

Apache Flink 主要从以下几个模块来做流批一体:

  1. sQL 层;2.DataStream API 层统一,批和流都可以使用 DataStream API 来开发;
  2. Scheduler 层架构统一,支持流批场景;
  3. Failover Recovery 层架构统一,支持流批场景;
  4. Shufle Service 层架构统一,流批场景选择不同的 Shufle Service ;

3.Flink框架优化

在实际生产环境中,针对不同的应用场景,我们对数据处理的要求是不同的:

  1. 有些场景下,只需离线处理数据,对实时性要求不高,但要求系统吞吐率高,典型的应用是 搜索引擎构建索引;
  2. 有些场景下,需对数据进行实时分析,要求每条数据处理延迟尽可能低,典型的应用是广告 推荐、金融风控场景。

三种解决方案

image.png

3.1Flink OLAP架构

image.png

  • Client :提交 sQL Query Gateway 接收 Client 提交的 sQL Query ,对sQL 进行语法解析和査询优化,生成 Flink 作业执行计划,提交给 Session 集群
  • Session Cluster: 执行作业调度及计算,并返回结果。

3.2Flink在OLAP架构的问题与设想

  • 架构与功能模块:
  1. JobManager 与 ResourceManager 在一个进程内启动,无法对 JobManager 进行水平扩展;
  2. Gateway 与 Flink Session Cluster 互相独立,无法进行统一管理。
  • 作业管理及部署模块:
  1. JobManager处理和调度作业时,负责的功能比较多,导致单作业处理时间长、并占用了过多的内存;
  2. TaskManager 部署计算任务时,任务初始化部分耗时严重,消耗大量 CPU 。
  • 资源管理及计算任务调度:
  1. 资源申请及资源释放流程链路过长
  2. Slot 作为资源管理单元, JM 管理 slot 资源,导致 JM 无法感知到 TM 维度的资源分布,使得资源管理完全依赖于 ResourceManager
  • 其他:
  1. 作业心跳与 Failover 机制,并不合适AP 这种秒级或毫秒级计算场景;

  2. AP 目前使用 Batch 算子进行计算,这些算子初始化比较耗时;