Flink简介

Flink的世界观是数据流

对 Flink ⽽⾔,其所要处理的主要场景就是流数据,批数据只是流数据的⼀个极限特例⽽已,因此 Flink 也是⼀款真正的流批统⼀的计算引擎redis

Unbounded streams?Bounded streams?

无界流与有界流
image.png编程

stateful computations?

有状态的计算:每次进行数据计算的时候基于以前数据的计算结果(状态)作计算,而且每次计算结果 都会保存到存储介质中,计算关联上下文context
基于有状态的计算不须要将历史数据从新计算,提升了计算效率
无状态的计算:每次进行数据计算只是考虑当前数据,不会使用以前数据的计算结果
image.png缓存

Flink流处理特性

1) 支持高吞吐、低延迟、高性能的流处理
2) 支持带有事件时间的窗口(Window)操做
3) 支持有状态计算的Exactly-once语义
4) 支持高度灵活的窗口(Window)操做,支持基于time、count、session,以及data-driven的窗口操做
5) 支持具备Backpressure功能的持续流模型
6) 支持基于轻量级分布式快照(Snapshot)实现的容错
7) 一个运行时同时支持Batch on Streaming处理和Streaming处理
8) Flink在JVM内部实现了本身的内存管理
9) 支持迭代计算
10) 支持程序自动优化:避免特定状况下Shuffle、排序等昂贵操做,中间结果有必要进行缓存session

Flink技术栈的核心组成

Flink技术栈的核心组成.png

Flink数据流编程模型

数据流模型.jpg

DataSet

处理批数据机器学习

DataStream

处理流数据分布式

Libraries支持

支持机器学习(FlinkML)
支持图分析(Gelly)
支持关系数据处理(Table)
支持复琐事件处理(CEP)ide

整合支持

支持Flink on YARN
支持HDFS
支持来自Kafka的输入数据
支持Apache HBase
支持Hadoop程序
支持Tachyon
支持ElasticSearch
支持RabbitMQ
支持Apache Storm
支持S3
支持XtreemFSoop

Dataflows数据流图

在Flink的世界观中,一切都是数据流,因此对于批计算来讲,那只是流计算的一个特例而已
Flink Dataflows是由三部分组成,分别是:source、transformation、sink结束
source数据源会源源不断的产生数据,transformation将产生的数据进行各类业务逻辑的数据处理,最 终由sink输出到外部(console、kafka、redis、DB......)
基于Flink开发的程序都可以映射成一个Dataflows性能

当source数据源的数量比较大或计算逻辑相对比较复杂的状况下,须要提升并行度来处理数据,采用并 行数据流
经过设置不一样算子的并行度 source并行度设置为2,map也是2.... 表明会启动多个并行的线程来处理数据学习

Dataflows 算子链

为了更高效地分布式执行,Flink会尽量地将operator的subtask连接(chain)在一块儿造成task。每一个 task在一个线程中执行。将operators连接成task是很是有效的优化:它能减小线程之间的切换,减小 消息的序列化/反序列化,减小数据在缓冲区的交换,减小了延迟的同时提升总体的吞吐量

运行打包注意点:

若是要将程序打包提交到集群运行,打包的时候不须要包含这些依赖,由于集群环境已经包含这些依赖,此时依赖的做用域应该设置为provided provided
Flink 应用在 IntelliJ IDEA 中运行,这些 Flink 核心依赖的做用域须要设置为 compile 而不是 provided 。 不然 IntelliJ 不会添加这些依赖到 classpath,会致使应用运行时抛出 NoClassDefFountError异常

相关文章
相关标签/搜索