这是我参与「第四届青训营 」笔记创作活动的第1天
流/批/OLAP 一体的 Flink 引擎 | 青训营笔记
1.Apache Flink 概述
Apache Flink 诞生背景
什么是大数据: 无法在一定时间内用常规软件工具对其进行获取、存储、管理和处理的数据
特点:价值化、海量化、多样化、高速化 (4个V)
- Hadoop 解决了什么问题?
Hadoop解决了海量数据的分布式存储问题,继而奠定了大数据分布式计算,云计算的基础,新一代、下一代的大数据技术无不构建在 Hadoop 生态基石之上。
大数据计算架构发展史
史前阶段:传统数仓、Oracle、单机使用
Hadoop:分布式、Map-Reduce、离线计算
Spark:批处理、流处理、SQL高阶API、内存迭代计算
Flink:流计算、实时,更快、流批一体、Streaming/Batch SQL
为什么需要流式计算
-
实时计算的业务场景需求带来了流式计算 带来了大数据计算架构模式变化
从慢速静态的批式到 快速 实时的流式
- 数据实时价值更大;
- 大数据批式处理分钟级、小时级、天极,部分业务场景无法接受;
-
流式计算特点:
- 实时计算、快速、低延迟;
- 无限流、动态、无边界;
- 7*24 持续运行;
WHY Flink 脱颖而出
流式计算引擎演化发展历程
Apache Flink:一个基于无界(流式)和有界(批式)数据集之上的有状态计算的框架和分布式处理引擎
Flink 作为一个最新的实时计算引擎,具备如下流计算技术特征:
- 完全一次保证:故障后应正确恢复有状态运算符中的状态;
- 低延迟:越低越好。许多应用程序需要亚秒级延迟;
- 高吞吐量:随着数据速率的增长,通过管道推送大量数据至关重要;
- 强大的计算模型:框架应该提供一种编程模型,该模型不限制用户并允许各种各样的应用程序在没有故障的情况下,容错机制的开销很低;
- 流量控制:来自慢速算子的反压应该由系统和数据源自然吸收,以避免因消费者缓慢而导致崩溃或降低性能;
- 乱序数据的支持:支持由于其他原因导致的数据乱序达到、延迟到达后,计算出正确的结果;
- 完备的流式语义:支持窗口等现代流式处理语义抽象;
- Google Dataflow Model 的开源引擎实现。
流式计算引擎能力对比
Apache Flink 开源生态
Apache Flink 在开源生态上的能力比较强大,可支持:
- 流批一体:支持流式计算和批式计算;
- OLAP:Flink 支持 OLAP 短查询场景;
- Flink ML:pyFlink、ALink、AIFlow 等生态支持 Flink 在 ML 场景的应用;
- Gelly:图计算;
- Stateful Function:支持有状态的 FAAS 场景;
2.Flink 整体架构
Flink 分层架构
由上至下分为四层: SDK层 执行引擎runtime层 状态存储层 以及 安全调度层
Flink 总体架构
flink集群核心组件:
- job manager JM 负责整个任务协调工作: 比如调度任务 协调容错恢复
2. task manager TM
负责执行一个dataflow graph 的 各个task以及data streams 的buffer 和数据交换
Flink 如何做到流批一体
传统流式 批式架构分开 的缺点
流式/批式 计算 核心区别
为什么可以做到流批一体?
因为批式计算本质上是流式计算的特例
everything is streams 批式数据也是一种特殊的数据流
理论上可以用一套引擎架构解决 但需要针对性的进行扩展和优化
Flink通过以下几个模块做到流批一体
SQL层
dataStream API层统一
Scheduler调度层架构统一 支持流批场景
failover Recovery层架构统一 (故障容错恢复层)
shuffle service层架构统一
3. Flink 架构优化
流/批/OLAP 业务场景概述
三种业务场景的特点以及挑战
特点
挑战
为什么三种场景可以用一套引擎来解决
通过对比可以发现:
批式计算是流式计算的特例,Everything is Streams,有界数据集(批式数据)也是一种数据流、一种特殊的数据流;
OLAP 计算是一种特殊的批式计算,它对并发和实时性要求更高,其他情况与普通批式作业没有特别大区别。
Flink 如何支持 OLAP 场景
- Flink 做 OLAP 的优势
-
统一引擎:流处理、批处理、OLAP 统一使用 Flink 引擎;
- 降低学习成本,仅需要学习一个引擎;
- 提高开发效率,很多 SQL 是流批通用;
- 提高维护效率,可以更集中维护好一个引擎;
-
既有优势:利用 Flink 已有的很多特性,使 OLAP 使用场景更为广泛;
- 使用流处理的内存计算、Pipeline;
- 支持代码动态生成;
- 也可以支持批处理数据落盘能力;
-
相互增强:OLAP 能享有现有引擎的优势,同时也能增强引擎能力
- 无统计信息场景的优化;
- 开发更高效的算子;
- 使 Flink 同时兼备流、批、OLAP 处理的能力,成为更通用的框架。
-
Flink OLAP 场景的挑战
-
秒级和毫秒级的小作业;
-
作业频繁启停、资源碎片;
Flink OLAP 计算相比流式和批式计算,最大的特点是 Flink OLAP 计算是一个面向秒级和毫秒级的小作业,作业在启动过程中会频繁申请内存、网络以及磁盘资源,导致 Flink 集群内产生大量的资源碎片;
-
Latency + 高 APS 要求;
OLAP 最大的特点是查询作业对 Latency 和 QPS 有要求的,需要保证作业在 Latency 的前提下提供比较高的并发调度和执行能力,这就对 Flink 引擎提出了一个新的要求。
-
Flink OLAP 架构现状
课程总结