Flink是什么
Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,提供支持流处理和批处理两种类型应用的功能。
Flink特点
-
现有的开源计算方案,会把流处理和批处理作为两种不同的应用类型:流处理一般需要支持低延迟、Exactly-once保证,而批处理需要支持高吞吐、高效处理
-
Flink是完全支持流处理,也就是说作为流处理看待时输入数据流是无界的;批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的
Flink组件栈
-
Deployment层:
主要涉及了Flink的部署模式,Flink支持多种部署模式:本地、集群(Standalone/YARN)、云(GCE/EC2)
-
Runtime层:
Runtime层提供了支持Flink计算的全部核心实现,比如:支持分布式Stream处理、JobGraph到ExecutionGraph的映射、调度等等,为上层API提供基础服务
-
API层:
主要实现了面向误解的Stream的流处理和面向Batch的批处理API,其中面向流处理对应DataStream APi,面向批处理对应DataSet API
-
Libaries层:
在API层之上构建的满足特定应用的实现计算框架,也分别对应于面向流处理和面向批处理两类
Flink自身优势
-
支持高吞吐、低延迟、高性能的流处理
(跑同样的业务代码,flink速率相对于spark streaming和strom都快,flink支持毫秒级的延迟操作)
-
支持高度灵活的窗口(Window)操作
-
支持有状态计算的Exactly-once语义
Apache | Flink | SparkStreaming | Storm |
---|---|---|---|
架构 | 架构介于spark和storm之间,主从结构与spark streaming相似,DataFlow Grpah与Storm相似,数据流可以被表示为一个有向图。每个顶点是一个用户定义的运算,每条边表示数据的流动。 | 架构依赖spark,主从模式,每个Batch处理都依赖(driver),可以理解为时间维度上的spark DAG。 Micro-Batch | 主从模式,且依赖ZK,处理过程中对主的依赖不大。 |
容错 | 基于Chandy-Lamport distributed snaps hots checkpoint机制Medium | WAL及RDD血统机制High | Records ACK Medium |
处理模型与延迟 | 单条时间处理。亚秒级低延迟 | 一个时间窗口内的所有事件。秒级高延迟 | 每次传入的一个事件。亚秒级低延迟 |
数据处理保证 | Exactly once | Exactly once(实现采用candy-Lamport算法,即marker-checkpoint)High | At least once(实现采用record-level acknowledgments) Medium |
Flink基本概念&编程模型
基本概念
-
Flink程序的基础构建模块是流(streams)与转换(transformations)
-
每一个数据流起始于一个或多个source,并终止于一个或多个sink
-
流上的聚合需要由窗口来规定范围,比如"计算过去的5分钟"或者最后100个元素的和"
-
窗口通常被区分为不同的类型,比如滚动窗口(没有重叠),滑动窗口(有重叠),以及会话窗口(由不活动的间隙时间所打断)
基本架构
-
Flink是基于Master-Slave风格的架构
-
Flink集群启动时,会启动一个JobManager进程、至少一个TaskManager进程
TaskManager
-
实际负责执行计算的Worker,在其上执行Flink Job的一组Task
-
负责管理其所在节点上的资源信息,如内存、磁盘、网络,在启动的时候将资源的状态向JobManagers汇报。
JobManagers
-
Flink系统的协调者,它负责接收Flink Job,调度组成Job的多个Task执行。
-
手机Job的状态信息,并管理Flink集群中从节点TaskManager。
Client
-
用户提交一个Flink程序时,会首先创建一个Client,该Client首先会对用户提交的Flink程序进行预处理,并提交到Flink集群。
-
Client会将用户提交的Flink程序组装一个JobGraph,并且是以JobGraph的形式提交的。
快速开始
mvn archetype:generate \
-DarchetypeGroupId=org.apache.flink \
-DarchetypeArtifactId=flink-quickstart-java \
-DarchetypeVersion=1.7.2 \
-DarchetypeCatalog=local
mvn archetype:generate \
-DarchetypeGroupId=org.apache.flink \
-DarchetypeArtifactId=flink-quickstart-scala \
-DarchetypeVersion=1.7.2 \
-DarchetypeCatalog=local