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

74 阅读2分钟

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

  1. Flink概述 首先明确一个概念,什么是大数据? 大数据(Big Data):指无法在一定时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合。由于大数据的这种特征,传统的数据处理方法无法满足其需求,大数据计算框架应运而生。 大数据计算框架的发展历史 image.png 由传统的数仓到Hadoop的MR、离线计算,到Spark的批处理、流处理、内存迭代计算,到现在最流行的实时计算框架Flink。 Flink在众多流式计算框架中脱颖而出的的原因是它的四大优势:
  • Exactly-Once,精确一次的计算语义
  • 状态容错
  • Dataflow编程模型
  • 流批一体
  1. Flink整体架构 2.1 Flink整体架构 Flink集群主要包含两个核心组件:
  • JobManager:负责整个任务的协调工作,包括调度task、触发协调Task做Checkpoint、协调容错恢复等。
  • TaskManager:负责执行一个DataFlowGraph的各个task以及data streams的buffer和数据交换。

2.2 Flink分层架构

  • SDK层:Flink的SDK目前主要有三类,SQL/Table、DataStream、Python。
  • 执行引擎层:执行引擎层提供了统一的DAG,用来描述数据处理的Pipeline,不管是流还是批,都会转化为DAG图,调度层把DAG转化为分布式环境下的Task,Task直接通过Shuffle传输数据。
  • 状态存储层:负责存储算子的状态信息。
  • 资源调度层:目前Flink可以支持部署在多种环境。

2.3 流/批一体的Flink Flink流批一体是因为在一些场景中,同时具有流式计算和批式计算的需求。而在Flink流批一体架构出现之前,这样的场景面临的主要困难有:

  • 人力成本高:流、批两套系统,相同的逻辑需要开发两遍,

  • 数据链路冗余:计算内容一致,但由于两套链路,相同的逻辑运行两遍,造成资源浪费。

  • 数据口径不一致:两套系统、两套算子、两套UDF,通常会产生不同程度的误差。

    如何做到流批一体呢? Everything is Streams 将批式计算看作是流式计算的特例,批示数据也是一种数据流、一种特殊的数据流。 Flink主要从以下几个模块来做流批一体:

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