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

113 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第2天,在第二节课中主要了解到了流/批/OLAP一体的Flink引擎有关的内容。

一、Flink概述

Apache Flink的诞生背景

什么是大数据

  • 指无法在一定时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合。
  • Value,Volumes,Velocity,Variety
  • 价值化、海量化、快速化、多样化

大数据计算架构发展历史

  • 史前阶段~2006->Hadoop->Spark->Flink

为什么需要流式计算

  • 大数据的实时性带来价值更大,比如监控场景、金融风控、实时推荐等场景。
  • 大数据实时性的需求,带来了大数据计算架构模式的变化。

为什么Apache Flink会脱颖而出

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

Apache Flink开源生态

image.png

二、Flink整体架构

Flink分层架构

  • SDK层
  • 执行引擎层
  • 状态存储层
  • 资源调度层

Flink总体架构

一个Flink集群,主要包含以下两个核心组件:

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

Flink作业示例

  • 一个Flink作业在Flink中的处理流程、DataFlow Model设计思想

Flink如何做到流批一体

为什么需要流批一体

流批一体的挑战

  • 流和批业务场景的特点如下表:

image.png

  • 批式计算相对于流式计算核心的区别:

image.png

为什么可以做到流批一体?

  • 批式计算是流式计算的特例,批式数据是一种特殊的数据流。
  • 一个无边界的数据流可以按时间段切成一个个有边界的数据集,所以有界数据集(批式数据)也是一种数据流。

如何做到流批一体

  • SQL层
  • DataStream API层统一,批和流都可以使用DataFrame API来开发
  • Scheduler Recovery层架构统一,支持流批场景
  • Failover Service层架构统一,支持流批场景
  • Shuffle Service层架构统一,流批场景选择不同的Shuffle Service

三、Flink架构优化

流/批/OLAP业务场景概述

三种业务场景的特点对比:

image.png 三种业务场景的解决方案的要求及带来的挑战:

image.png

为什么三种业务场景可以用一套引擎来解决:

  • 批式计算是流式计算的特例,批式数据也是一种特殊的数据流。
  • OLAP计算是一种特殊的批式计算,对并发和实时性要求更高,其他情况与普通批式作业没有特别大区别。

Flink如何支持OLAP场景

优势

  • 引擎统一
  • 既有优势
  • 生态统一

image.png

四、Flink使用案例

  • 电商流批一体实践
  • Flink OLAP场景实践