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

59 阅读3分钟

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

Flink概述

大数据(Big Data):指无法在一定时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合。

大数据计算机架构

graph TD
2006及以前--> Hadoop --> Spark --> Flink

实时性 --> 流式计算(Flink 流批一体)

Flink整体架构

2.1 Flink的分层架构

屏幕截图 2022-07-29 221242.png

2.2 Flink总体架构

两个核心组件:JobManager和TaskManager

JM:负责整个任务的协调工作,包括:调度task、触发协调Task做Checkpoint、协调容错恢复等。

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

屏幕截图 2022-07-29 215654.png

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

Job Manager:管理一个job的生命周期,向ResourceManager申请slot,并将task调度到对应的TM上

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

2.3 Flink作业示例

2.4 Flink如何做到流批一体?

流/批的区别(此处是表格)

| --- | 流式计算 | 批式计算 |

| 数据流 | 无限 | 有限 |

| 时延 | 低延迟,业务会感知运行情况 | 实时性要求低,只关注最终结果产出时间 |

|业务场景|广告推荐、金融风控 | 搜索引擎构建索引、批式数据分析 |

如何实现流批一体?

  • Everything is Streams 一套引擎架构解决两种场景。

可从以下几个模块做到流批一体:

  1. SQL层
  2. DataStream API层统一
  3. Scheduler层架构统一
  4. Failover Recovery架构统一
  5. Shuffle Service层架构统一,流/批场景选择不同的Shuffle Service

3.流批一体的Scheduler

  • Scheduler主要负责将作业的DAG转化为在分布式环境中可以执行的Task
  • 两种调度模式

屏幕截图 2022-07-29 224212.png

5.流批一体的Shuffle Service

  • Shuffle:实际上,分布式计算中所有涉及到上下游衔接的过程,都可以理解为Shuffle
  • 两种实现:
  1. 基于文件的Pull Based Shuffle,如Spark或MR。具有较高的容错性,适合大规模批作业处理
  2. 基于Pipeline的Push Based Shuffle,如Flink、Storm、Presto等,它 低延迟、高性能
  • 流/批差异:
    • Shuffle数据的生命周期:流的Shuffle与Task绑定,批是解耦的。
    • 存储介质:流(实时)-->内存 批(大/容错)-->磁盘
    • 部署方式:流的Shuffle服务和计算节点部署在一起,可以减少网络开销,从而减少latency,而批则不同。

小结:Flink提供一套统一的Shuffle架构,兼顾流与批的个性与共性

  • 在Streaming和OLAP场景:为了性能的需要,通常会使用基于Pipeline的Stuffle
  • 在Batch场景:一般选择Blocking的Shuffle模式

经过以上改造,Flink已经针对DataStream层、调度层。Shuffle Service层均完成了对流和批的支持。

Flink架构优化

3.1流/批/OLAP(交互式分析)业务场景概述

3.2为什么三套可以用一套引擎

  • Everything is Stream
  • OLAP是特殊批,只是对并发和实时性要求更高

3.3 Flink的OLAP优化之路

  • Flink做OLAP的优势
  • Flink做OLAP场景的挑战
  • Flink OLAP架构现状
  • Flink在OLAP架构的问题与设想
写在最后:

本文如有任何错误,欢迎批评指正~

内容主要参考了青训营王蒙老师流/批/OLAP一体的Flink引擎的PPT