Flink入门

Flink是什么

Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,提供支持流处理和批处理两种类型应用的功能。

Flink特点

  • 现有的开源计算方案,会把流处理和批处理作为两种不同的应用类型:流处理一般需要支持低延迟、Exactly-once保证,而批处理需要支持高吞吐、高效处理

  • Flink是完全支持流处理,也就是说作为流处理看待时输入数据流是无界的;批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的

Flink组件栈

Flink入门_第1张图片

 

  • 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进程

Flink入门_第2张图片

  •  

TaskManager

  1. 实际负责执行计算的Worker,在其上执行Flink Job的一组Task

  2. 负责管理其所在节点上的资源信息,如内存、磁盘、网络,在启动的时候将资源的状态向JobManagers汇报。

JobManagers

  1. Flink系统的协调者,它负责接收Flink Job,调度组成Job的多个Task执行。

  2. 手机Job的状态信息,并管理Flink集群中从节点TaskManager。

Client

  1. 用户提交一个Flink程序时,会首先创建一个Client,该Client首先会对用户提交的Flink程序进行预处理,并提交到Flink集群。

  2. 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

你可能感兴趣的:(Flink)