Flink 是一个面向分布式数据流处理和批量数据处理的开源计算平台。和 Spark 类似,两者都希望提供一个统一功能的计算平台给用户,都在尝试建立一个统一的平台以运行批量,流式,交互式,图处理,机器学习等应用。
来历:2014年后迅速成为Apache 的顶级项目之一
特点:流处理:低延迟、Exactly-once保证; 批处理:高吞吐、高效处理
优势:
- 支持高度灵活的窗口操作(滑动、滚动、session窗口)
- 支持有状态计算的Exactiy-once 语义
- 提供DataStream API和DataSet API
- Flink把批处理认为是一种有界的流处理
- Deployment层:涉及Flink部署模式(本地、集群(Standalone/YARN)、云(GCE/EC2))
——YARN 通用的资源管理系统,进行资源调度
- RunTime层:为上层API提供基础服务,提供Flink计算的核心实现(分布式Stream\JobGraph到ExecutionGraphd 映射、调度等)
- API层:包括面向流处理的DataStream API;面向批处理的DataSet API
- Libaries层:API之上的特定应用的实现
Flink分布式运行环境
基本架构
Flink是基本Master-Slave风格的架构,Flink集群启动时,会启动一个JobManager进程、至少一个TaskManager进程
- JobManager:Flink系统的协调者,负责接收Flink Job,调度组成Job的多个Task执行收集job的状态信息,并管理Flink集群中从节点TaskManager
- TaskManager:负责执行计算的Worker,在其上执行Flink Job的一组Task;TaskManager负责管理其所在节点上的资源信息。内存、磁盘、网络,在启动时候将资源的状态向JobManager汇报
- Client :用户提交一个Flink程序时,会先创建一个Client,它对用户提交的Flink程序进行处理,组装一个jobGraph,并以jobGraph的形式提交到Flink集群
Flink程序的基础构建模块是流(streams)与转换(transformations),每个数据流始于一个或多个source,至于一个或多个sink
流——>输入(窗口数据);转换——>对数据的具体操作(map、reduce)
Flink的常用算子
DataStream