一.Flink与干流计算引擎对比
1. Hadoop MapReduce
MapReduce 是由谷歌初次在论文“MapReduce: Simplified>
图1 Hadoop MapReduce处置模型
Hadoop MR1经过JobTracker进程来治理作业的调度和资源,TaskTracker进程担任作业的实践口头,经过Slot来划分资源(CPU、内存等),HadoopMR1存在资源应用率低的疑问。Hadoop MR2为了处置MR1存在的疑问,对作业的调度与资源启动了更新变革,将JobTracker变成YARN,优化了资源的应用率。其中,YARN的ResourceManager 担任资源的治理,ApplicationMaster担任义务的调度。YARN 允许可插拔,岂但允许HadoopMapReduce,还允许Spark、Flink、Storm等计算框架。Hadoop MR2 处置了HadoopMR1的一些疑问,然而其对HDFS的频繁I/O操作会造成系统无法到达低提前的要求,因此它只适宜离线大数据的处置,不能满足实时计算的要求。
Spark 是由加州大学伯克利分校开源的类Hadoop MapReduce的大数据处置框架。与 HadoopMapReduce相比,它最大的不同是将计算两边的结果存储于内存中,而不要求存储到HDFS中。
Spark的基本数据模型为RDD(Resilient DistributedDataset,弹性散布式数据集)。RDD是一个无法扭转的散布式汇合对象,由许多分区(partition)组成,每个分区蕴含RDD的一局部数据,且每个分区可以在不同的节点上存储和计算。在Spark中,一切的计算都是经过RDD的创立和转换来成功的。
Spark Streaming 是在Spark Core的基础上裁减而来的,用于允许实时流式数据的处置。如图2所示,Spark Streaming对流入的数据启动分批、转换和输入。微批处置无法满足低提前的要求,只能算是近实时计算。
图2 Spark Streaming 处置模型
Structured Streaming 是基于Streaming SQL 引擎的可裁减和容错的流式计算引擎。如图3所示,StructuredStreaming将流式的数据全体看成一张无界表,将每一条流入的数据看成无界的输入表,对输入启动处置会生成结果表。生成结果表可以经过触发器来触发,目前允许的触发器都是定时触发的,整个处置相似SparkStreaming的微批处置;从Spark 2.3开局引入继续处置。继续处置是一种新的、处于试验形态的流式处置模型,它在StructuredStreaming的基础上允许继续触发来成功低提前。
图3 Structured Streaming处置模型
Flink是对有界数据和无界数据启动有形态计算的散布式引擎,它是纯流式处置形式。流入Flink的数据会经过预约的DAG(Directed AcyclicGraph,有向无环图)节点,Flink会对这些数据启动有形态计算,整个计算环节相似于管道。每个计算节点会有本地存储,用来存储计算形态,而计算节点中的形态会在必定期间内耐久化到散布式存储,来保障流的容错,如图4所示。这种纯流式形式保障了Flink的低提前,使其在诸多的实时计算引擎竞争中具备长处。
图4 Flink 流式处置模型
二.Flink基本架构
上方从分层角度和运转时角度来引见Flink 基本架构。其中,关于运转时Flink 架构,会以1.5版本为分界限对前后版本的架构变卦启动引见。
1. 分层架构
Flink是分层架构的散布式计算引擎,每层的成功依赖高层提供的服务,同时提供形象的接口和服务供高层经常使用。全体分层架构如图5所示。
图5 Flink 分层架构
2. 运转时架构
Flink 运转时架构阅历过一次性不小的演化。在Flink 1.5 版本之前,运转时架构如图6所示。
图6 Flink 1.5 以前版本的运转时架构
从Flink 1.5开局,Flink 运转时有两种形式,区分是Session 形式和Per-Job形式。
Session形式:在Flink1.5之前都是Session形式,1.5及之后的版本与之前不同的是引入了Dispatcher。Dispatcher担任接纳作业提交和耐久化,生成多个JobManager和保养Session的一些形态,如图7所示。
图7 Session形式
Per-Job形式:该形式启动后只会运转一个作业,且集群的生命周期与作业的生命周期息息关系, 而Session形式可以有多个作业运转、多个作业共享TaskManager资源, 如图8所示。
图8 Per-Job形式
关于作者:罗江宇,赵士杰,李涵淼,闵文俊,四位作者都是十分资深的Flink专家,局部作者是Flink源代码的保养者和变革者。
罗江宇:Flink技术专家,先后到任于新浪微博、滴滴和某大型电商公司。先后主导或介入了多家公司的Flink实时计算服务的构建、对超大规模集群的保养以及Flink引擎的变革。领有丰盛的实时计算实战阅历,目前专一于Kubernetes调度、FlinkSQL及Flink流批一体化方向。
赵士杰:资深大数据技术专家,曾到任于滴滴、阿里巴巴等一线互联网公司。从0到1深度介入了滴滴的大数据树立,领有十分丰盛的大数据平台一线树立阅历,关于大数据畛域的计算和存储引擎也有深化钻研。
李涵淼:大数据研发专家,曾任滴滴大数据开发工程师。从事大数据畛域上班多年,介入过多家公司流计算平台的设计与研发,目前专一于流批一体、OLAP技术方向的钻研与运行。
闵文俊:蚂蚁个人技术专家、开源大数据社区喜好者、Flink Contributor,在实时计算畛域上班多年,深度介入了滴滴、蚂蚁个人的实时计算平台树立。书评