流/批/OLAP 一体的 Flink 引擎介绍笔记(一)| 青训营笔记
这是我参与「第四届青训营 -大数据场」笔记创作活动的的第3天
一、Apache Flink 概述
1. Apache Flink 诞生背景
1.1 什么是大数据
指无法在一定时间内用常规软件工具对其进行获取存储管理和处理的数据集合
- 海量化:大数据
- 多样化:数据种类多样
- 快速化:数据产生流入速度快
- 价值化:数据价值密度低、整体密度高
1.2 大数据计算架构发展历史
- 史前阶段:传统数仓、Oracle、单机、黑箱使用
- Hadoop:分布式、Map-Reduce(双算子API)、离线计算
<GOOGLE “三驾马车”> - Spark:批处理、流出来、SQL高阶API(更多语义、使用简单)、内存迭代计算
- Flink:流计算、实时/速度更快、流批一体、Streaming/BatchSQL
1.3 为什么需要流计算?
-
大数据实时性带来价值更大:监控场景、金融风控、实时推荐等
-
大数据实时性要求带来计算架构模式的变化
-
批式计算
- 离线计算,非实时
- 静态数据集
- 小时/天周期性计算
-
流式计算
- 实时计算、快速、低延迟
- 无限流、动态、无边界数据源
- 24h不断运行
- 流批一体
-
1.4 流式计算特点
- 实时计算、快速、低延迟;
- 无限流、动态、无边界;
- 7*24 持续运行;
1.5 流处理
流处理 方式会随时对进入系统的数据进行实时的计算,这种模式不需要针对整个数据集执行操作,而是对通过系统传输的每个数据项执行操作。流处理中的数据集是 无边界 的,这就产生了几个重要的影响:
- 完整数据集只能代表截至目前已经进入到系统中的数据总量。
- 工作数据集也许更相关,在特定时间只能代表某个单一数据项。
- 处理工作是基于事件的,除非明确停止否则没有“尽头”。处理结果立刻可用,并会随着新数据的抵达继续更新。
1.6 批处理
所谓 批处理 是指把一项数据处理任务先分解成更小粒度的任务,把这些任务分布在集群中的各台实例上进行计算,之后把各实例上的计算结果重新计算和组合成最终结果。批处理系统通常会操作大量的静态的数据,并等到这些数据全部处理完成后才能得到返回的结果。
批处理方式使用的数据集通常有以下特征:
- 有界:批处理数据集代表数据的有限集合
- 持久:数据通常始终存储在某种类型的持久存储位置中
- 大量:批处理操作通常是处理极为海量数据集的唯一方法
1.7 混合处理
在大数据处理技术中流派中,除了单纯的批处理和流处理模式之外,还有一些处理框架既可以进行批处理也可以进行流处理,我们称之为混合处理框架。虽然专注于一种处理方式可能非常适合特定场景,但是混合框架为数据处理提供了通用的解决方案。这些框架可以用相同或相关的组件和 API 处理两种类型的数据,借此让不同的处理需求得以简化。混合处理框架中目前比较著名的就是 Spark 和 Flink 。
2. 为什么 Flink 会脱颖而出
2.1 流式计算引擎发展历史
MapReduce→Hadoop→Flume→Storm→Spark Streaming→Flink
-
Storm:History of Apache Storm and lessons learned - thoughts from the red planet;
- Storm API 的 low-level 以及开发效率低下;
- 一致性问题:Storm 更多考虑到实时流计算的处理时延而非数据的一致性保证;
-
Spark Streaming:An Architecture for Fast and General Data Processing on Large Clusters;
- Spark Streaming 相比于 Storm 的低阶 API 以及无法正确性语义保证,Spark 是流处理的分水岭:第一个广泛使用的大规模流处理引擎,既提供较为高阶的 API 抽象,同时提供流式处理正确性保证。
-
Flink:从产品技术来看,Flink 作为一个最新的实时计算引擎,具备如下流计算技术特征:
- 完全一次保证:故障后应正确恢复有状态运算符中的状态;
- 低延迟:越低越好。许多应用程序需要亚秒级延迟;
- 高吞吐量:随着数据速率的增长,通过管道推送大量数据至关重要;
- 强大的计算模型:框架应该提供一种编程模型,该模型不限制用户并允许各种各样的应用程序在没有故障的情况下,容错机制的开销很低;
- 流量控制:来自慢速算子的反压应该由系统和数据源自然吸收,以避免因消费者缓慢而导致崩溃或降低性能;
- 乱序数据的支持:支持由于其他原因导致的数据乱序达到、延迟到达后,计算出正确的结果;
- 完备的流式语义:支持窗口等现代流式处理语义抽象;
- Google Dataflow Model 的开源引擎实现。
- 主要的流式计算引擎能力对比
2.2 为什么选择Flink
- Exactly-Once 精确一次的计算语义
- Stateful 状态容错 (Checkpoint)
- Dataflow编程模型 Window等高阶需求支持友好
- 流批一体
3. Apache Flink 开源生态
Apache Flink 在开源生态上的能力比较强大,可以支持:
- 流批一体:支持流式计算和批式计算;
- OLAP:Flink 可以支持 OLAP 这种短查询场景;
- Flink ML:pyFlink、ALink、AIFlow 等生态支持 Flink 在 ML 场景的应用;
- Gelly:图计算;
- Stateful Function:支持有状态的 FAAS 场景;
- ...