这是我参与【第四届青训营】笔记创作活动的第二天。在今天早上,我通过录播课,对于流批一体,流计算的特点,Flink的运用与现状有了更深的了解,并且结合学员手册,我对Flink的整体介绍做了以下总结:
1.1 Apache Flink 的诞生背景
1.1.1 诞生背景, 解决了什么问题
-
大数据:指无法在一定时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合。
-
大数据的特点:
- 价值化:数据都是有价值的
- 海量化:数据量极其庞大
- 多样化:数据类型等多式多样
- 快速化:数据的接受传递速度很快
-
大数据计算架构的发展史:
-
史前阶段~2006年:
- 传统数仓
- Oracle
- 单机
- 黑箱使用
-
Hadoop:
- 分布式
- Map-Reduce
- 离线计算
-
Spark:
- 批处理
- 流处理
- SQL高阶API
- 内存迭代计算
-
Flink:
- 流计算
- 实时、更快
- 流批一体
- Streaming/Batch SQL
-
1.1.2 实时计算的业务场景需求、为什么会出现流式计算
- 数据实时价值更大;
- 大数据批式处理分钟级、小时级、天极,部分业务场景无法接受;
- 批式计算离线计算,非实时
- 批式计算是静态数据库,以小时/天等周期性计算
1.1.3 流式计算特点:
- 实时计算、快速、低延迟;
- 7*24 持续运行;
- 无限流、动态、无边界;
- 流批一体
1.2 为什么FLink会脱颖而出
1.2.1流式计算引擎发展历史
-
Storm:
- Storm API 的 low-level 以及开发效率低下;
- 一致性问题:Storm 更多考虑到实时流计算的处理时延而非数据的一致性保证;
-
Spark Streaming:
- Spark Streaming 相比于 Storm 的低阶 API 以及无法正确性语义保证,Spark 是流处理的分水岭:第一个广泛使用的大规模流处理引擎,既提供较为高阶的 API 抽象,同时提供流式处理正确性保证。
-
Flink:
- 完全一次保证:故障后应正确恢复有状态运算符中的状态;
- 低延迟:越低越好。许多应用程序需要亚秒级延迟;
- 高吞吐量:随着数据速率的增长,通过管道推送大量数据至关重要;
- 强大的计算模型:框架应该提供一种编程模型,该模型不限制用户并允许各种各样的应用程序在没有故障的情况下,容错机制的开销很低;
- 流量控制:来自慢速算子的反压应该由系统和数据源自然吸收,以避免因消费者缓慢而导致崩溃或降低性能;
- 乱序数据的支持:支持由于其他原因导致的数据乱序达到、延迟到达后,计算出正确的结果;
- 完备的流式语义:支持窗口等现代流式处理语义抽象;
- Google Dataflow Model 的开源引擎实现。
1.2.2 Why Flink
- Exactly-Once :精确一次的计算语义
- Checkpoint :状态容错
- 流批一体
- Dataflow编程模型,Window等高阶需求支持友好
1.3 Apache Flink的开源生态
Apache Flink 在开源生态上的能力比较强大,可以支持:
- 流批一体:支持流式计算和批式计算;
- OLAP:Flink 可以支持 OLAP 这种短查询场景;
- Flink ML:pyFlink、ALink、AIFlow 等生态支持 Flink 在 ML 场景的应用;
- Gelly:图计算;
- Stateful Function:支持有状态的 FAAS 场景;