转载:阿里巴巴为何选择ApacheFlink?
本文主要整理自阿里巴巴计算平台事业部高级技术专家莫文在云栖大会上的演讲。
大树从小树长成,小橡子可以长成参天大树
随着人工智能时代的到来和数据量的爆炸,在典型的;大数据业务场景中,最常见的数据业务方式是使用批处理技术处理完整数据和流数据处理实时处理增量数据。
在大多数业务场景中,用户的业务逻辑在批处理和流处理中往往是相同的。
但用户用于批处理和流处理的两套数据处理引擎是不同的。
因此,用户通常必须编写两套代码。
这无疑会带来一些额外的负担和成本。
阿里巴巴的产品数据处理往往需要增量和全量两种不同的业务流程,所以阿里巴巴就想能不能有一个统一的大数据引擎技术。
用户只需要根据自己的业务逻辑开发一套代码即可。
针对这样不同的场景,无论是全量数据、增量数据还是实时处理,都可以支持一整套的解决方案。
这也是阿里巴巴选择Flink的背景和初衷。
目前有很多开源主机可供选择,比如Storm、Samza、Flink、KafkaStream等。
,以及使用Spark、Hive、Pig、Flink等进行批处理。
但同时支持流处理和批处理的计算引擎只有两种选择:一是ApacheSpark,二是ApacheFlink。
技术、生态等方面综合评估。
首先,Spark的技术思想是模拟批量的流量计算。
而Flink则使用基于流的计算来模拟批量计算。
从技术发展的角度来看,使用批处理来模拟流程时存在一定的技术限制,并且这些限制可能很难克服。
Flink基于流模拟批处理,在技术上具有更好的扩展性。
从长远来看,阿里巴巴决定将Flink作为统一通用的大数据引擎作为未来的选择。
Flink是低延迟、高吞吐量的大数据统一数据处理引擎。
在阿里巴巴的生产环境中,Flink的计算平台每秒可以处理数亿条消息或事件,具有毫秒级的延迟。
同时,Flink提供了一次性一致性语义。
数据的准确性得到保证。
这样,Flink大型机引擎就可以提供经济计算的功能。
Flink在阿里巴巴的现状
阿里巴巴基于ApacheFlink搭建的平台于2016年正式上线,从阿里巴巴的搜索和推荐场景开始落地。
目前,阿里巴巴所有公司,包括阿里巴巴旗下所有子公司,都使用基于Flink的实时计算平台。
同时,数据平台Flink运行在Hadoop集群上,代码开源。
Hadoop的YARN充当资源管理和调度的角色,HDFS充当数据存储的角色。
因此,Flink可以无缝连接开源大数据软件Hadoop。
目前,这个基于Flink的实时计算平台不仅服务于阿里巴巴集团,还通过阿里云的云产品API为整个开发者生态提供基于Flink的云产品支持。
Flink在阿里巴巴的大规模应用表现如何?
规模:一个系统是否成熟,规模是一个重要指标。
聪明变成了原来的阿里巴巴刚推出时只有几百台服务器,现在已经拥有数万台服务器,是全球为数不多的之一;
状态数据:基于Flink,内部积累的状态数据已经上线PB级;
事件:如今,Flink的数据平台每天处理的数据量超过10,000条。
1亿;
PS:旺季每秒可处理超过4.72亿次访问。
最典型的应用场景就是阿里巴巴双11的大屏;
Flink的发展之路
然后我们从开源技术的角度来谈谈ApacheFlink是如何是如何诞生以及如何成长的。
而阿里是如何进入这个成长的关键时刻的呢?您对此做出了哪些贡献和支持?
Flink诞生于欧洲大数据研究项目的鼎盛时期。
该项目是柏林工业大学的一个研究项目。
早期,Flink是做批量计算的,但在2014年,Stratosphere的核心成员孵化了Flink,并于同年捐赠了Flink。
对于Apache来说,它后来成为Apache最好的大数据项目。
同时,Flink计算的主流方向定位为流式,即使用流式计算来计算所有的大数据。
这就是Flink技术诞生的背景。
2014年,Flink作为专注于流计算的大数据引擎,开始在开源大数据行业崭露头角。
与Storm、SparkStreaming等流式计算引擎不同,它不仅是高吞吐量、低延迟的计算引擎,而且还具有许多先进的功能。
例如,它提供有状态的数据处理,支持状态管理,支持数据语义的强一致性,支持事件定时和水印来处理消息干扰。
Flink的核心概念和基本概念
Flink与其他流计算引擎的区别在于状态管理。
状态如何?例如,如果您开发流量计算系统或执行数据处理任务,则经常需要对数据进行统计,例如Sum、Count、Min和Max。
这些值必须保存。
因为它们是不断更新的,所以这些值或变量可以理解为一种状态。
如果数据源读取Kafka、RocketMQ,可能需要记录读取的位置并记录偏移量。
这些偏移变量是要计算的状态。
Flink内置了状态管理,可以将这些状态存储在Flink内部,而不需要将它们存储在外部系统中。
这样做有以下好处:一是减少了计算引擎对外部系统的依赖和分布,运维更加简单;二是性能显着提升:如果是外部可访问的,像Redis,HBase就得通过网络和RPC访问;。
如果Flink在内部访问这些变量,它只能通过自己的进程来访问这些变量。
同时,Flink会定期持久化这些状态的检查点,并将检查点存储在分布式持久系统中,例如HDFS。
这样,当Flink的任务出错时,它会从上一个检查点恢复整个流的状态,然后继续运行流处理。
对用户没有数据影响。
Flink如何保证检查点恢复时不丢失数据、不冗余?想确保计算准确吗?
原因是Flink使用了一套经典的Chandy-Lamport算法。
其核心思想是将这种流计算视为一种流拓扑,并定期将来自源的数据插入到该拓扑的头部。
一个特殊的屏障为点和广播热潮从上游到下游。
当每个节点接收到所有栅栏时,取状态的快照。
每个节点完成快照后,整个拓扑就被认为是一个完整的检查点。
然后,无论发生什么错误,都会从最后一个检查点进行恢复。
Flink使用这个经典算法来保证强语义一致性。
这也是Flink与其他无状态流计算引擎的核心区别。
下面是Flink是如何解决苦难问题的。
例如,如果您根据发布时间查看《星球大战》序列,您可能会发现故事发生了跳跃。
在流量计算方面,和这个例子很相似。
所有消息的到达时间与源在线系统日志中的实际发生时间不匹配。
在流处理期间,您希望按照消息在源中实际发生的顺序进行处理,而不是按照它们实际到达程序的时间进行处理。
Flink提供了一些先进的事件计时和水印技术来解决不规则使用的问题。
以便用户能够有序地处理消息。
这是Flink中非常重要的一个特性。
然后我们介绍一下Flink刚起步时的核心概念和思想。
这是Flink发展的第一阶段。
这个阶段也是Flink发展、阿里巴巴介入的阶段。
这个故事源于我们2015年年中在搜索组进行的一项调查,当时阿里巴巴有自己的批处理技术和流数据处理技术,既有专有的,也有开源的。
但要思考下一代大数据引擎的方向和未来趋势,我们对新技术做了很多研究。
基于大量的研究成果,我们最终得出结论:解决大数据的通用计算需求,集成批流计算引擎是大数据技术的发展方向。
最终我们选择了Flink。
但是2015年的Flink还不够成熟,规模和稳定性都没有实现。
最后我们决定在阿里巴巴成立Flink分支来进行Flink的开发,为了适应阿里巴巴超大规模的业务场景,我们做了很多修改和改进。
在这个过程中,我们团队不仅对Flink的性能和稳定性进行了改进和优化,还在其核心架构和特性上做出了很多创新和改进并贡献给社区,例如:Flink全新的分布式架构、增加了定量Checkpoint机制、基于信用的网络流量控制机制和流式SQL。
阿里巴巴对Flink社区的贡献
我们看两个设计案例。
首先是阿里巴巴重构了Flink的分布式架构,明确了Flink作业调度和资源管理的分层和解耦。
这样做的第一个优点是Flink可以原生运行在各种开源资源管理器上。
增强这种分布式架构后,Flink可以原生运行在HadoopYarn和Kubernetes这两个最常见的资源管理系统上。
同时,Flink的任务规划从集中式规划变为分布式规划,使得Flink可以支持更大的集群,并实现更好的资源隔离。
第二是实现增量检查点机制,因为Flink提供了状态计算和规则检查点机制。
如果内部数据越来越多,检查点就会越来越大,最终会导致错误。
提供增量检查点后,Flink会自动判断哪些数据发生了增量变化以及哪些数据发生了变化。
同时,只保留修改过的数据。
这样,检查点就不会随着时间的推移变得越来越难以运行,并且性能直到整个系统变得非常稳定。
这也是我们为社区贡献的一个非常重要的功能。
经过2015年到2017年完善Flink的流功能,Flink社区已经逐渐成熟。
Flink也成为流媒体中最常见的数据引擎。
因为Flink最初想成为一个统一流处理和批处理的大数据引擎,所以这项工作在2018年就已经开始了。
为了实现这个目标,阿里巴巴提出了新的统一API架构和统一SQL解决方案。
同时,在流式计算的各种功能得到完善之后,我们认为批量计算也需要进行各种改进。
无论是在任务调度层还是数据shuffle层,在容错性和可用性方面都有很多工作需要改进。
究其原因,主要有两点与大家分享:
●统一API栈
●统一SQL解决方案
让我们看一下FlinkAPI堆栈的当前状态。
研究过Flink或者使用过Flink的开发者应该都知道这一点。
Flink有两个基本的API,一个是dataflow,另一个是dataset。
DataflowAPI是为流用户提供的,DatasetAPI是为Batch用户提供的。
然而这两个API的执行路径完全不同,甚至需要生成不同的任务来执行。
所以这和统一的API是冲突的,也是不完善的,也不是最终的解决方案。
在运行时之上应该有一个统一批处理集成的基本API层。
我们希望API层能够统一。
因此,我们将采用DAG(有限无环图)API作为新架构中批流的统一API层。
对于这种有限无环图,批量计算和流计算不需要明确表达。
开发者只需要在不同的节点、不同的边定义不同的属性即可规划数据是流属性还是批量属性。
整个拓扑是一个统一的语义表达,可以集成批量流。
整个计算不需要区分流计算和批量计算,只需要表达自己的需求即可。
有了这个API,Flink的API栈就统一了。
除了统一的基础API层和统一的API栈外,上层的SQL解决方案也统一了。
对于批量SQL,我们可以认为有流计算和批量计算的数据源,我们可以将这两种数据源模拟成数据表。
流式数据的数据源可以认为是一个不断更新的数据表,而批量数据的数据源可以认为是一个相对静态的表,没有更新的数据表。
整个数据处理可以看作是一次SQL查询,最终的结果也可以模拟为一个结果表。
对于流计算来说,结果表是一个不断更新的结果表。
对于批处理,结果表对应于更新后的结果表。
从SOL整个语义表达来看,流和批是可以调和的。
此外,流式SQL和批处理SQL都可以使用相同的Query来指示重用。
这样,所有流批次都可以通过同一查询进行优化或分析。
甚至许多流和批处理运算符都可以重用。
Flink未来的方向
首先,阿里巴巴将基于Flink的本质,打造面向大数据的通用统一计算引擎。
放置在生态和场景的基础上。
目前,Flink是常见的流计算机,很多互联网公司已经达成共识,Flink是大数据的未来,是最好的流计算机。
接下来的重要任务是让Flink在批量计算方面实现突破。
在多种场景下,它已经成为主流的批处理计算机引擎。
从而实现流式和批式的无缝切换,流式和批式的界限变得越来越模糊。
使用Flink,可以在一次计算中同时进行流计算和批量计算。
另一个方向是Flink获得多种语言的生态支持,不仅有Java和Scala,还有用于机器学习的Python和Go。
未来希望用更丰富的语言来开发Flink计算任务,描述计算逻辑,连接多个生态系统。
最后不得不说一下AI,因为很多大数据的数据需求和数据量支撑着非常流行的AI场景。
因此,在完善Flink流批生态的基础上,我们将不断前行,完善Flink上层机器学习算法库。
同时,Flink将借鉴成熟的机器并融合深度学习。
例如,Flink上的Tensorflow可用于集成大数据ETL计算和特征计算,用于机器学习、特征计算和训练计算,让开发者同时享受多个生态系统的好处。
阿里云领域是什么?
这是阿里巴巴推出的一款信息系统产品,主要针对中小企业。
其服务器和硬件支持均由阿里巴巴托管在云端。
相当于阿里巴巴替你管理你的数据。
客户的硬件投资非常低,系统管理成本通常以年费的形式出现。
为什么阿里巴巴、腾讯等公司把服务器放在美国?
为了让美国民众享受到阿里巴巴和腾讯的服务,国内民众去美国也需要相关服务。
阿里巴巴属于哪个行业?
阿里巴巴的主营业务是电子商务,还包括互联网金融、电子支付、物流等。
与此同时,阿里巴巴的不断发展也涉及到更广泛的领域,比如媒体、物联网等。
阿里巴巴集团主要产业:阿里巴巴、淘宝、支付宝、阿里巴巴软件、阿里妈妈、口碑网、阿里云、中国雅虎、一淘、淘宝商城、中国万网、聚划算、云峰基金、蚂蚁金服金融的。
平均在线商店需要多大的服务器?
不需要,因为你搜索的淘宝店是一个虚拟空间。
可以直接在阿里巴巴搭建的数据机房使用。
无需准备自己的服务器。
装修一下店面,把产品摆上货架就可以了
阿里巴巴千岛湖数据中心是建在湖底吗?
是的,阿里巴巴的一个服务器中心位于千岛湖底部。
阿里云千岛湖数据中心建筑面积3万平方米,共11层,可容纳至少5万台。
作为建设水冷工业数据中心的模板,具有很强的创新性和代表性。
数据中心90%的时间不需要电冷却。
深湖水通过完全密封的管道流经数据中心,帮助冷却服务器。
呈现为城市景观自然冷却后返回千岛湖。