这是我参与「第四届青训营 」笔记创作活动的第1天
Flink引擎介绍
1. 什么是大数据
大数据:是指无法在一定时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合。其具有四个典型特征:
- Value(价值化)
- Volumes(海量化)
- Velocity(快速化)
- Variety(多样化)
2. 大数据计算架构的发展历史
- Hadoop
- 分布式
- Map-Reduce
- 离线计算
- Spark
- 批处理
- 流处理
- SQL高阶API
- Flink
- 流计算
- 实时、更快
- 流批一体
- Streaming/Batch SQL
3. 流计算
流计算:实时获取来自不同不同数据源的海量数据,经过实时分析处理,获得有价值的信息。
3.1 流式计算的特点
- 实时计算、快速、低延迟
- 无限流、动态、无边界
- 7*24H持续运行
- 流批一体
4. 为什么Apache Flink会脱颖而出
Apache Flink is a framework and distributed processing engine for stateful computations over unbounded and bounded data streams.Flink has been designed to run in all common cluster environments,perform computations at in-memory speed and at any scale.---来自Apache 官方介绍
4.1 flink的四个特征
- Exactly-once
- 精确的一次计算语义
- 状态容错
- Checkpoint
- Dataflow编程模型
- Window等高阶需求支持友好
- 流批一体
4.2 流式计算引擎发展历史
-
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 的开源引擎实现。
-
主要的流式计算引擎能力对比
4.3 Flink的优点
支持批处理和流处理。
优雅流畅的支持java和scala。
高吞吐量和低延迟。
支持事件处理和无序处理通过SataStream API,基于DataFlow数据流模型。
在不同的时间语义(事件时间,摄取时间、处理时间)下支持灵活的窗口(时间,滑动、 翻滚,会话,自定义触发器)。
仅处理一次的容错担保,通过event time & watermarker。
自动背压机制,下游对上游的反压。
图处理(批) 机器学习(批) 复杂事件处理(流)。
在dataSet(批处理)API中内置支持迭代程序(BSP)。
高效的自定义内存管理,和健壮的切换能力在in-memory和out-of-core中。
兼容hadoop的mapreduce和storm。
集成YARN,HDFS,Hbase 和其它hadoop生态系统的组件,丰富的connector。
4.4 Flink的开源生态
Apache Flink 在开源生态上的能力比较强大,可以支持:
- 流批一体:支持流式计算和批式计算;
- OLAP:Flink 可以支持 OLAP 这种短查询场景;
- Flink ML:pyFlink、ALink、AIFlow 等生态支持 Flink 在 ML 场景的应用;
- Gelly:图计算;
- Stateful Function:支持有状态的 FAAS 场景;
- ...
5. Flink整体架构
5.1 Flink分层架构
- SDK层:Flink的SDK目前主要有三类,SQL/Table、DataStream、Python;
- 执行引擎层(Runtime层):执行引擎层提供了统一的DAG,用来描述数据处理的Pipeline,不管是流还是批,都会转化为DAG图,调度层再把DAG转化为分布式环境下的Task,Task之间通过Shuffle传输数据;
- 状态存储层:负责存储算子的状态信息;
- 资源调度层:目前Flink可以支持部署在多种环境。
5.2 Flink整体架构
图片来源:(Flink Architecture | Apache Flink)
一个Flink集群,主要包含以下两个核心组件:
- JobManager(JM):负责整个任务的协调工作,包括:调度task、触发协调Task做Checkpoint、协调容错恢复等;
- TaskManager(TM):负责执行一个DataFlow Graph的各个task以及data streams的buffer和数据交换。
5.2.1 JobManager的职责
- Dispatcher:接受作业,拉起JobManager来执行作业,并在JobManager挂掉之后恢复作业;
- JobMaster:管理一个job的整个生命周期,会向ResourceManager申请slot,并将task调度到对应TM上;
- ResourceManager:负责slot资源的管理和调度,Task manager拉起之后会向RM注册。