这是我参与「第四届青训营 」笔记创作活动的的第2天,今天学习了【流/批/OLAP 一体的 Flink 引擎介绍】这部分内容,重点是讲解了Flink框架的结构,详细介绍了流、批、OLAP的场景及对应的Flink实践。
流/批/OLAP场景
| 批 | 流 | OLAP |
|---|---|---|
| 离线计算 周期性计算 | 实时计算 7*24运行 | 交互式分析 数据分析、BI报表业务,特殊的批计算,对并发和实时性要求高 |
Flink
面向有界、无界数据流的基于状态计算的分布式处理框架。
分层架构
- SDK: SQL、datastream、python
- Runtime: 将代码转换为DAG图,调度层把DAG转换为Task
- 状态存储
- 资源调度
总体架构
1.JobManager
任务整体协调,task调度,checkpoint(exactly once)
2.TaskManager
执行DataFlow Graph的各个任务
流批一体
批是流的特例,批是有界数据流,流是无界数据流
Everything is streams.
调度层
BLOCKING:
task之间数据交换是BLOCKING模式,分为N个pipeline region
PIPELINED:
所有task是同一个pipeline region
shuffle层
shuffle:分布式计算中,用来连接上下游数据交互的过程都叫shuffle
分类
| 基于文件 | 基于pipeline |
|---|---|
| 容错能力强,稳定,适合批作业 | 低延时和高性能,但数据不会落盘,批任务失败需要重跑 |
流批一体
流/OLAP:基于pipeline 计算结束存内存,继续传输
批:基于blocking 计算结束先存磁盘(落盘),继续传输
Flink支持OLAP
现状:
- 作业管理与部署
JM单作业处理时间长,
TM初始化消耗CPU多,耗时严重
- 资源管理任务调度
JM管理slot.TM没有感知
实践
Flink First steps
安装Docker
docker pull flink
docker run -p 8000:8081 -it flink /bin/bash # 把docker的flink UI 8081 转发到本地的8000
查看java版本
$ java -version
openjdk version "11.0.16" 2022-07-19
OpenJDK Runtime Environment 18.9 (build 11.0.16+8)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.16+8, mixed mode, sharing)
当前目录文件
启动&&关闭本地集群
./bin/start-cluster.sh
./bin/stop-cluster.sh