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

73 阅读2分钟

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

Flink概述

1.1Apache Flink背景

1.1.1 什么是大数据?

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

image.png

1.1.2 大数据计算架构发展史

image.png 史前阶段~2006:

  • 传统数仓
  • Oracle
  • 单机
  • 黑箱使用

Hadoop:

  • 分布式
  • Map-Reduce
  • 离线计算

Spark

  • 批处理
  • 流处理
  • SQL高阶API
  • 内存迭代计算

Flink

  • 流计算
  • 实时、更快
  • 流批一体
  • Streaming/Batch SQL

1.1.3 为什么需要流式计算

  1. 监控场景(避免业务故障)
  2. 金融风控(阻断风险)
  3. 实施推荐 (抖音、淘宝推荐····)

大数据实时性的需求,大数据计算架构模式形成了从批式计算从流式计算的转变

1.2 为什么Apache Flink会脱颖而出

1.2.1 流式计算引擎对比

image.png

1.3 Apache Flink生态

image.png

2.Flink整体架构

2.1 Flink分层架构

  1. SDK层:SQL/Table、DataStream、PyFlink
  2. 执行引擎层(Runtime):执行引擎层提供了统一的DAG用来描述数据处理,不管是流还是批,都会统一转换成DAG图,调度层把DAG转换成分布式环境下Task,然后通过Shuffle传输数据;
  3. 状态存储层:负责存储算子的状态信息;
  4. 资源调度层: 目前Flink可以部署在多种环境;

2.2 Flink总体架构


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

  1. JobManager(JM):负责整个任务的协调工作(调度task,触发协调task做checkPoint、协调容错机制等)
  2. TaskManager(TM):负责执行一个DataFlowGraph的各个task以及data streams 的buffer 和数据交换;

image.png

Dispatcher:接收作业,拉起JobMannager来执行作业,并在JobMannager挂掉之后恢复作业; JobMaster:管理Job的整个生命周期; ResourceMannager:负责slot资源的管理和调度;

2.3 Flink作业示例

流式的WorkCount示例:从Kafka中读取一个实时数据流,每10s统计一次单词出现次数,DataStream实现代码如下:流式的WorkCount示例:从Kafka中读取一个实时数据流,每10s统计一次单词出现次数,DataStream实现代码如下:

image.png

业务逻辑转换成数据流图:

image.png