Flink若干认识和基础功能

一、能力
支持流批处理
基于Event-Time事件处理的支持
exactly-once一致性语义的保证
高可用性
支持多种资源管理框架:Yarn、Mesos、Kubernetes、Stand-alone

运行应用的规模上来讲:Flink也是被设计运行有状态的流应用,整个应用并行化为成千上万的任务,在集群上分布式并行执行。

状态管理方面:Flink将任务的状态保存在内存中,如果内存容纳不下,会以可以带来比较好的访问效率的数据结构将其存储在磁盘上。

异步增量检查点算法
在申请资源方面,Flink会根据配置的并行度,自行识别所需资源,并通过REST方式申请。

二、State

对状态的管理是Flink的一大特长。那State在Flink中究竟是怎么一种地位?
1、Flink针对不同的数据结构提供了很多的状态原语,开发人员可根据访问模式,选择高效的状态原语对状态进行保存。
2、在State的管理方面,Flink提供了不同的State Backend对应用的状态数据进行管理,将State存放在内存或者以检查点的形式放在磁盘上。
3、通过State来实现exactly once一致性语义,State的检查点形式的保存为恢复提供了数据基础,检查点和恢复算法提供保障。
4、大状态的支持,对于计算来讲,如果数据在内存中,那么其访问效率就高,就能带来好的计算效率,内存资源有限,状态太大的话,肯定容纳不了。Flink这里采用的是异步增量检查点算法的方式实现对TB级的大状态的支持。
5、应用扩展性,有状态的应用怎么扩展?Flink通过redistribute应用状态到更多、或者更少的Worker的方式来实现状态应用的扩展。

三、Time

Flink也综合考虑了延迟、完整性、精确性,来提供针对时间处理的不同模式
1、对于基于Event-time处理的模式,以事件的时间戳作为依据,无论是处理存档数据,还是实时数据,均能得到一致而精确的结果。
2、水印,这是一种对延迟和结果完整性的权衡。
3、不在水印范围内的数据,延迟数据的处理?通过侧面输出,重路由来更新结果。
4、触发处理模式,这种处理并不根据事件时间来进行,而是根据触发时间来进行,适用于严格低延迟要求,并且能够容忍一定的精确性的场合。

四、工作逻辑

看一张Flink图片
Flink若干认识和基础功能_第1张图片
通过这张图我们来窥视一下flink的工作逻辑
1、多任务分布式并行执行
2、每个任务都有一个State,即当前状态数据,这里的状态数据是由状态运算符产生的,而且下一计算单位的结果要以上一个计算结果为基础
3、状态数据定期进行检查点操作,这一操作我们可以理解为状态截断,某个任务失败之后能够从持久化的状态数据中恢复计算。后边我们再看啥是增量检查点。

先提一个问题:异步增量检查点对Flink支持大State有什么帮助?

其实很好回答,异步就是不阻塞,你做检查点保存状态,我的计算仍然进行,互不耽误。而增量即是一部分,哪一部分?就是相对于上个检查点,发生变化的那部分。这带来什么好处呢?执行检查点的任务要做的事相比每次都全量来讲少了很多,于是时间上的开销就大大减少,最终表现为效率的提升。

还有一点是,将大的状态写入到持久化存储例如HDFS上,这是一种基于磁盘的分布式多副本存储,其写入速度和效率并不高。

其实弄清为什么要对状态进行间歇性检查点以及其对大数据流处理的意义,相比这个问题,要有意义的多。

五、三个功能层次

怎么理解Flink提供的三个层次的API
Flink若干认识和基础功能_第2张图片
我们来看三个层次的API分别能够满足什么样的需求?
首先:对于ProcessFunction,给予对事件和状态进行细粒度控制的支持,可以对状态进行任意的修改。图中标示主要应用于有状态的事件驱动的应用。那么什么是事件驱动的应用?事件驱动一般都有几个必要元素:事件时间、历史状态、操作。
这里另有两点需要关注,对于Event-driven应用数据计算的位置是local的,带有事件时间的record直接到达task所在节点,并由task对每条数据执行计算并应用到State上。

其次:对于DataStream API,这个基本是流处理引擎都具备通用流处理能力,比如窗口操作、转换操作、需要连接外部数据库对流记录进行补充等。map、reduce、aggregate等都是最常见的。

最后:对于SQL/Table-API,这个毋庸多说,对流查询的顶层封装,这个的目标是对使用者屏蔽底层实现细节,而只用关注SQL语法实现业务查询功能即可。能够无缝和DataStream and DataSet APIs进行集成,

六、三个集成

Flink Library三大集成:
1、Complex Event Processing (CEP): 集成在DataStream中
2、DataSet API :批处理核心API
3、Gelly 图计算及分析,其功能的实现由DataSet API完成,Gelly库集成了很多内置的算法,并暴露Gelly API给使用者。

不难发现,Flink确实是个优秀的大数据处理引擎,可以说Hadoop MR是基础、Spark是扩展、Flink是方向。

本文比较粗浅,后续会从各个细节上不断完善,如有错误还请小伙伴们指出。

你可能感兴趣的:(Flink,大数据)