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

131 阅读4分钟

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

1.本堂课重点内容

1.1 Flink概述

1.流式计算场景及流式计算框架发展历程

2.业内主要流失框架对比,为什么Flink能够脱颖而出

1.2 Flink整体架构

1.Flink的分层架构,Flink当前的整体架构介绍

2.一个Flink作业如何调整和运行起来

3.Flink如何做到流批一体

1.3 Flink架构优化

1.流/批/OLAP三种业务场景概述

2.Flink如何来支持OLAP场景需求,需要做哪些架构上的优化

1.4 精选案例讲解

2.重要知识点

1.大数据(Big Data)

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

四个特点:Value,Volumes,Variety,Velocity

2.Flink特点

  • Exactly-Once精确一次的计算语义
  • 状态容错Checkpoint
  • Dataflow编程模型 Window等高阶需求支持友好
  • 流批一体

3.Flink与Storm和Spark Streaming对比

  • 一致性保证
    ①Storm可以实现至少处理一次数据,但不能保证只处理一次。
    ②Spark Streaming和Flink可以保证对数据仅一次的处理。
  • 吞吐量
    ①SparkStreaming:高吞吐、不能保证低延迟。
    ②Storm:不能做到高吞吐、低延迟。
    ③Flink:高吞吐、低延迟
  • 容错机制
    ①Storm可以通过ACK机制实现容错。
    ②Spark Streaming和Flink可以通过Checkpoint机制实现容错。
  • 状态管理
    ①Storm中没有实现状态管理。
    ②Spark Streaming实现了基于DStream的状态管理。
    ③Flink实现了基于操作的状态管理

4.Flink分层架构

  1. SDK层
    SDK:SQL/Table,DaTaStream,Python
  2. 执行引擎层(Runtime层)
  3. 状态储存层
  4. 资源调度层

image.png

5.Flink整体架构

一个Flink集群,主要包含以下两个核心组件:
1.JobManager (JM):
负责整个任务的协调工作,包括:调度task、触发协调Task做 Checkpoint,协调容错恢复等;
2.TaskManager (TM):
负责执行一个DataFlowGraph 的各个 task以及data streams的 buffer和数据交换。

image.png

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

6.流式计算和批式计算对比

流式计算批式计算
实时计算离线计算
延迟在秒级以内处理时间为分钟到小时级别
无线数据集有限数据集
低延迟,业务会感知运行中的情况实时性要求不高,只关注最终结果产出时间

7.流批一体的Scheduler层

Scheduler主要责任将作业的DAG转化为在分布式环境中可以执行的Task

Flink的两种调度模式:

  1. EAGER:申请一个作业所需要的全部资源,然后同时调度这个作业的全部Task,所有的Task之间采取Pipeline的方式进行通信。用于Stream作业场景。
  2. LAZY:先调度上游,等待上游产生数据或结束后在调度下游,类似Spark的Stage执行模式。用于Batch作业场景。
  • 由Pipeline的数据交换方式连接的Task构成一个Pipeline Region;
  • 本质上,不管是流作业还是批作业,都是按照Pipeline Region粒度来申请资源和调度任务。

8.流批一体的Shuffle Service层

Shuffle:在分布式计算中,用来连接上下游数据交互的过程叫做Shuffle。
实际上,分布式计算中所有涉及到上下游衔接的过程,都可以理解为Shuffle。

  • Shuffle的实现:
  1. 基于文件的Pull Based Shuffle,比如 Spark或MR,它的特点是具有较高的容错性,适合较大规模的批处理作业,由于是基于文件的,它的容错性和稳定性会更好—些;
  2. 基于Pipeline的 Push Based Shuffle,比如Flink、Storm、Presto等,它的特点是低延迟和高性能,但是因为shuffile数据没有存储下来,如果是 batch任务的话,就需要进行重跑恢复;

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

9.Flink架构优化

  • Flink做OLAP的优势:
  1. 引擎同一:降低学习成本,提高开发效率,提高维护效率。
  2. 既有优势:内存计算,Code-gen,Pipeline Shuffle,Session模式的MPP架构。
  3. 生态支持:跨数据源查询支持,TCP-DS基准测试性能强。
  • Flink OLAP 架构现状

image.png

  1. Client:提交SQL Query;
  2. Gateway:接收Client提交的SQL Query,对SQL进行语法解析和查询优化,生成Flink作业执行计划,提交给Session集群;
  3. Session Cluster:执行作业调度及计算,并返回结果。
  • Apache Flink最终演进为:

image.png