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

118 阅读2分钟

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

流/批/OLAP 一体的Flink引擎介绍

01.Flink概述

Apache Flink诞生背景:对使用场景提出了更高的要求

三驾马车(全面了解大数据“三驾马车”的开源实现 - 知乎 (zhihu.com))

大数据:海量化、多样化、快速化、价值化

大数据计算发展历史:传统数仓->Hadoop->Spark->Flink

大数据实时性带来价值更大:监控场景、金融风险、实时推荐……

批式计算: 离线计算非实时、静态数据集、周期性计算;流式计算: 实时计算快速低延时、无限流动态无边界、持续运行、流批一体。

 

Apache Flink脱颖而出:精确、低延迟高吞吐、Checkpoint容错机制、支持SQL提高迭代

流式框架对比:

image.png

Apache Flink开源生态:

image.png

02.Flink整体架构

Flink分层架构:Flink各个模块的用途

SDK层:三类:SQL/Table、DataStream、PythonFlink

执行引擎层( Runtime 层): 执行引擎层提供了统一的 DAG,用来描述数据处理的 Pipeline,不管是流还是批,都会转化为 DAG 图,调度层再把 DAG 转化成分布式环境下的 Task,Task 之间通过 Shuffle 传输数据;

状态存储层:负责存储算子的状态信息

资源调度层:目前Flink可以支持部署在多种环境。

Flink总体架构:

JobManager(JM) 负责整个任务的协调工作,包括:调度 task、触发协调 Task 做 Checkpoint、协调容错恢复等,核心有下面三个组件:

  • Dispatcher: 接收作业,拉起 JobManager 来执行作业,并在 JobMaster 挂掉之后恢复作业;

  • JobMaster: 管理一个 job 的整个生命周期,会向 ResourceManager 申请 slot,并将 task 调度到对应 TM 上;

  • ResourceManager:负责 slot 资源的管理和调度,Task manager 拉起之后会向 RM 注册;

TaskManager(TM) :负责执行一个 DataFlow Graph 的各个 task 以及 data streams 的 buffer 和数据交换。

为什么需要流批一体:人力成本比较高相同逻辑需要开发两遍、数据链路冗余造成资源浪费、数据口径不一致可能导致误差。

Flink如何做到流批一体:

  • SQL 层;

  • DataStream API 层统一,批和流都可以使用 DataStream API 来开发;

  • Scheduler 层架构统一,支持流批场景;

  • Failover Recovery 层 架构统一,支持流批场景;

  • Shuffle Service 层架构统一,流批场景选择不同的 Shuffle Service;