一、什么是flink
flink是⼀个分布式,⾼性能,随时可⽤的以及准确的流处理计算框架,
flink可以对**⽆界数据**(流处理)和有界数据(批处理)进⾏有状态计算(flink天⽣⽀持状态计算)的分
布式,⾼性能的计算框架。
二、flink****的基⽯
flink的四⼤基⽯:checkpoint,state,time,window
checkpoint:基于chandy-lamport算法实现分布式计算任务的⼀致性语义;
state:flink中的状态机制,flink天⽣⽀持state,state可以认为程序的中间计算结果或者是历史计算结果;
time:flink中⽀持基于事件时间和处理时间进⾏计算,spark streaming只能按照process time进⾏处
理; 基于事件时间的计算我们可以解决数据迟到和乱序等问题。
window:flink提供了更多丰富的window,基于时间,基于数量,session window,同样⽀持滚动和滑动窗 ⼝的计算。
三、flink****流处理和批处理
流处理:⽆界,实时性有要求,只需对经过程序的每条数据进⾏处理
批处理:有界,持久,需要对全部数据进⾏访问处理;
spark vs flink
spark:spark⽣态中是把所有的计算都当做批处理,spark streaming中流处理本质上也是批处理
(micro batch);
flink:flink中是把批处理(有界数据集的处理)看成是⼀个特殊的流处理场景;flink中所有计算都是流 式计算;
四、flink中重要角色
JobManager: 类似 spark 中 master,负责资源申请,任务分发,任务调度执行,checkpoint 的协调执行;可以搭建 HA,双 master。
TaskManager: 类似 spark 中的 worker,负责任务的执行,基于 dataflow (spark 中 DAG) 划分出的 task; 与 jobmanager 保持心跳,汇报任务状态。
五、有界数据和无界数据
无界数据流:数据流是有一个开始但是没有结束;
有界数据流:数据流是有一个明确的开始和结束,数据流是有边界的。
flink 处理流批处理的思想是:
flink 支持的 runtime (core 分布式流计算) 支持的是无界数据流,但是对 flink 来说可以支持批处理,只是从数据流上来说,有界数据流只是无界数据流的一个特例,无界数据流只要添加上边界就是有界数据流。