赞
踩
Flink是一个批处理和流处理结合的统一计算框架,其核心是一个提供了数据分发以及并发化计算的流数据处理引擎。它的最大亮点是流处理,是业界最顶级的开源流处理引擎。
Flink与Storm类似,属于事件驱动型实时流系统。
Flink最适合的应用场景是低延时的数据处理场景:高并发处理数据,实验毫秒级,且兼具可靠性。
典型应用场景有:
通过对比,可以看出Flink流计算框架比Storm的性能高的多。
FusionInsight HD提供大数处理环境,基于社交开源软件增强,按照场景选择业界最佳实践。
FLink是批处理和流处理结合的统计计算框架,用于高并发pipeline处理数据,实验毫秒级的场景响应,且兼具可靠性。
在FusionInsight HD集群中,Flink主要组以下组件进行交互:
##Flink技术栈:
API:DataStream API是用于流处理的接口。
DataSet API是用于批处理的接口。它们都会使用单独编译的处理方式。
Core:Flink的Core叫做Runtime,是Flink流处理和批处理时共用的一个引擎。Runtime以
Deploy(部署方式):在最底层,Flink提供了三种部署模式。分别为Local,Cluster,Cloud。
DataStream:FLink用类DataStream来表示程序中的流式数据、用户可以认为它们是含有重复数据的不可修改的集合(Collection),DataStaram中元素的数据时无限的。
Flink数据源:
批处理:
流处理:
DataStream Transformation:
常用的Transformation有:map(), flatMap(), filter(), keyBy(), partition(), rebalance(), shuffle(), broadcast(), project()等。
关键角色概念:
用户实现的Flink程序是由Stream数据和Transformation算子组成。
Stream是一个中间结果数据,而Transformation是算子,它对一个或多个输入Stream进行计算处理,输出一个或多个结果Stream。
Flink程序在执行的时候,会被映射成一个Streaming Dataflow,一个Streaming Dataflow是由一组Stream和Transformation Operator组成的。在启动时从一个或多个Source Operator开始,结束与一个或多个Sink Operator。
Source操作符载入数据,通过map(), keyBy(), apply()等Transformation操作符处理stream。数据处理完成后,调用sink写入相关存储系统,如HDFS、HBase、Kafka等。
一个Stream可以被分成多个Stream的分区,也就是Stream Partition。一个Operator也可以被分为多个Operator Subtask。如上图中,Source被分成Source1和Source2,它们分别为Source的Operator Subtask。每一个Operator Subtask都是在不同的线程当中独立执行的。一个Operator的并行度,就等于Operator Subtask的个数。上图Source的并行度为2。而一个Stream的并行度就等于它生成的Operator的并行度。
数据在两个operator之间传递的时候有两种模式:
Flink内部有一个优化的功能,它会根据上下游算子的紧密程度来进行优化,紧密程度高的算子可以把它优化成一个大的Operator。如图中的Source和Map紧密程度很高,就可以优化成一个Operator Chain。实际上就是一个执行链,每个执行链都会在TaskManager中一个独立的线程汇总执行。Operator Chain实际上就是一个Operator,keyBy也是一个Operator,sink也是一个Operator,图的上半部分都是通过Stream连接,每个Operator都在一个独立的Task中运行。下半部分是上半部分的一个并行版本,对每一个Task都并行为多个Subtask。
Flink支持基于时间窗口操作,也支持基于数据的窗口操作:
TimeWindow:时间窗口,按固定的时间划分的窗口。
CountWindow:事件窗口,窗口是以数据驱动的,比如每经过100个元素,就把这100个元素归结到一个事件窗口当中。
Tumbing Windows:滚动窗口,窗口之间时间点不重叠。它是按照固定的时间,或固定的事件个数划分的,分别可以叫做滚动时间窗口和滚动事件窗口。
Sliding Windows:滑动窗口,窗口之间时间点存在重叠。对于某些应用,它们需要的时间是不间断的,需要平滑的进行窗口聚合。例如,可以每30s记算一次最近1分钟用户所购买的商品数量的总数,这个就是时间滑动窗口;或者每10个客户点击购买,然后就计算一下最近100个客户购买的商品的总和,这个就是事件滑动窗口。
Session Windows:会话窗口,经过一段设置时间无数据认为窗口完成。
<
Checkpoint机制是Flink可靠运行的基石,可以保证Flink集群在某个算子因为某些原因(如异常退出)出现故障时,能够将整个应用流图的状态恢复到故障之前的某一状态,保证应用流图状态的一致性。
该机制可以保证应用在运行过程中出现失败时,应用的所以有状态能够从某一个检测点恢复,保证数据仅被处理一次(Exactly Once)。另外,也可以选择至少处理一次(at least once)。
Checkpoint机制具体执行过程:
每个需要checkpoint的应用,它在启动的时候,Flink的JobManager就会为它创建一个checkpointCoordinator。checkpointCoordinator它全权负责本应用的快照的制作,用户可以通过checkpointCoordinator中的setCheckpointInterval接口设置checkpoint的周期。
多Source源的Checkpoint机制:
当一个算子上游有多个来源时,它会将首先接收到barrier端阻塞掉,等待其他输入端的barrier,只有当接收到所有输入端的barrier时,该算子才会开始合并barrier执行制作快照过程,并将合并后的barrier广播到下游算子。
以上内容为听华为大数据培训课程和大学MOOC上厦门大学 林子雨的《大数据技术原理与应用》课程而整理的笔记。
大数据技术原理与应用: https://www.icourse163.org/course/XMU-1002335004
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。