穆萨妹编者按:充斥着海量数据增长的统计数据,网络化黄金时代的未来感扑面而来而至。无论是记数的小统计数据黄金时代,却是他们已经开始历经的大统计数据黄金时代,排序的边界线已经开始被无穷扩宽,而统计数据的价值非但无法被排序。当下,谈到大统计数据,不得已提到炙手可热的新一代大统计数据排序发动机Apache Flink(以下全称Flink)。责任编辑将紧密结合Flink的今生今生,从销售业务视角起程,向大家暗喻:为何穆萨优先选择了Flink?
责任编辑主要重新整理自穆萨巴巴排序网络平台事业部现职控制技术研究者莫问在金蝶讨论会的演说。
合抱之木,出生呜呼
随着人工智慧黄金时代的来临,统计信息量的暴发,在众所周知的大统计数据的销售业务情景下统计数据销售业务最通用型的作法是:换用格式化的控制技术处置HMPP统计数据,采用INS13ZD排序处置动态存量数据。在大多数的销售业务情景下,使用者的销售业务方法论在格式化和流处置当中常常是完全相同的。但是,使用者用于格式化和流处置的三套排序发动机是完全相同的。
因此,使用者通常须要写三套标识符。众所周知,这带来了一些附加的经济负担和生产成本。穆萨巴巴的商品统计数据处置就时常须要直面存量和HMPP三套完全相同的销售流程问题,所以穆萨就在想,他们能不能有两套标准化的大统计数据发动机控制技术,使用者只须要根据自己的销售业务方法论合作开发两套标识符。这样在各种完全相同的情景下,无论是HMPP统计数据却是存量统计数据,亦或者动态处置,两套计划方可全部全力支持,这就是穆萨优先选择Flink的大背景和本意。
目前开放源码大统计数据排序发动机有很多优先选择,流排序如Storm,Samza,Flink,Kafka Stream等,格式化如Spark,Hive,Pig,Flink等。而同时全力支持流处置和格式化的排序发动机,只有两种优先选择:一个是Apache Spark,一个是Apache Flink。
从控制技术,生态等各方面的综合考虑。首先,Spark的控制技术理念是基于批来模拟流的排序。而Flink则完全相反,它采用的是基于流排序来模拟批排序。
从控制技术发展方向看,用批来模拟流有一定的控制技术局限性,并且这个局限性可能很难突破。而Flink基于流来模拟批,在控制技术上有更好的扩展性。从长远来看,穆萨决定用Flink做一个标准化的、通用型的大统计数据发动机作为未来的选型。
Flink是一个低延迟、高吞吐、标准化的大统计数据排序发动机。在穆萨巴巴的生产环境中,Flink的排序网络平台可以实现毫秒级的延迟情况下,每秒钟处置上亿次的消息或者事件。同时Flink提供了一个Exactly-once的一致性语义。保证了统计数据的正确性。这样就使得Flink大统计数据发动机可以提供金融级的统计数据处置能力。
Flink在穆萨的现状
基于Apache Flink在穆萨巴巴搭建的网络平台于2016年正式上线,并从穆萨巴巴的搜索和推荐这两大情景开始实现。目前穆萨巴巴所有的销售业务,包括穆萨巴巴所有子公司都采用了基于Flink搭建的动态排序网络平台。同时Flink排序网络平台运行在开放源码的Hadoop集群之上。采用Hadoop的YARN做为资源管理调度,以 HDFS作为统计数据存储。因此,Flink可以和开放源码大统计数据软件Hadoop无缝对接。
目前,这套基于Flink搭建的动态排序网络平台不仅服务于穆萨巴巴集团内部,而且通过穆萨云的云产品API向整个合作开发者生态提供基于Flink的云产品全力支持。
Flink在穆萨巴巴的大规模应用,表现如何?
规模:一个系统是否成熟,规模是重要指标,Flink最初上线穆萨巴巴只有数百台服务器,目前规模已达上万台,此等规模在全球范围内也是屈指可数;
状态统计数据:基于Flink,内部积累起来的状态统计数据已经是PB级别规模;
Events:如今每天在Flink的排序网络平台上,处置的统计数据已经超过万亿条;
PS:在峰值期间可以承担每秒超过4.72亿次的访问,最众所周知的应用情景是穆萨巴巴双11大屏;
Flink的发展之路
接下来从开放源码控制技术的视角,来谈一谈Apache Flink是如何诞生的,它是如何成长的?以及在成长的这个关键的时间点穆萨是如何进入的?并对它做出了那些贡献和全力支持?
Flink诞出生欧洲的一个大统计数据研究项目StratoSphere。该项目是柏林工业大学的一个研究性项目。早期,Flink是做Batch排序的,但是在2014年,StratoSphere里面的核心成员孵化出Flink,同年将Flink捐赠Apache,并在后来成为Apache的顶级大统计数据项目,同时Flink排序的主流方向被定位为Streaming,即用INS13ZD排序来做所有大统计数据的排序,这就是Flink控制技术诞生的大背景。
2014年Flink作为主攻流排序的大统计数据发动机开始在开放源码大统计数据行业内崭露头角。区别于Storm,Spark Streaming以及其他INS13ZD排序发动机的是:它不仅是一个高吞吐、低延迟的排序发动机,同时还提供很多高级的功能。比如它提供了有状态的排序,全力支持状态管理,全力支持强一致性的统计数据语义以及全力支持Event Time,WaterMark对消息乱序的处置。
Flink核心概念以及基本理念
Flink最区别于其他流排序发动机的,其实就是状态管理。
什么是状态?例如合作开发两套流排序的系统或者任务做统计数据处置,可能时常要对统计数据进行统计,如Sum,Count,Min,Max,这些值是须要存储的。因为要不断更新,这些值或者变量就可以理解为一种状态。如果统计数据源是在读取Kafka,RocketMQ,可能要记录读取到什么位置,并记录Offset,这些Offset变量都是要排序的状态。
Flink提供了内置的状态管理,可以把这些状态存储在Flink内部,而不须要把它存储在外部系统。这样做的好处是第一降低了排序发动机对外部系统的依赖以及部署,使运维更加简单;第二,对性能带来了极大的提升:如果通过外部去访问,如Redis,HBase它一定是通过网络及RPC。如果通过Flink内部去访问,它只通过自身的进程去访问这些变量。同时Flink会定期将这些状态做Checkpoint持久化,把Checkpoint存储到一个分布式的持久化系统中,比如HDFS。这样的话,当Flink的任务出现任何故障时,它都会从最近的一次Checkpoint将整个流的状态进行恢复,然后继续运行它的流处置。对使用者没有任何统计数据上的影响。
Flink是如何做到在Checkpoint恢复过程中没有任何统计数据的丢失和统计数据的冗余?来保证精准排序的?
这其中原因是Flink利用了两套非常经典的Chandy-Lamport算法,它的核心思想是把这个流排序看成一个INS13ZD的拓扑,定期从这个拓扑的头部Source点开始插入特殊的Barries,从上游开始不断的向下游广播这个Barries。每一个节点收到所有的Barries,会将State做一次Snapshot,当每个节点都做完Snapshot之后,整个拓扑就算完整的做完了一次Checkpoint。接下来无论出现任何故障,都会从最近的Checkpoint进行恢复。
Flink利用这套经典的算法,保证了强一致性的语义。这也是Flink与其他无状态流排序发动机的核心区别。
下面介绍Flink是如何解决乱序问题的。比如星球大战的播放顺序,如果按照上映的时间观看,可能会发现故事在跳跃。
在流排序中,与这个例子是非常类似的。所有消息到来的时间,和它真正发生在源头,在线系统Log当中的时间是不一致的。在流处置当中,希望是按消息真正发生在源头的顺序进行处置,不希望是真正到达程序里的时间来处置。Flink提供了Event Time和WaterMark的一些先进控制技术来解决乱序的问题。使得使用者可以有序的处置这个消息。这是Flink一个很重要的特点。
接下来要介绍的是Flink启动时的核心理念和核心概念,这是Flink发展的第一个阶段;第二个阶段时间是2015年和2017年,这个阶段也是Flink发展以及穆萨巴巴介入的时间。故事源于2015年年中,他们在搜索销售部的一次调研。当时穆萨有自己的格式化控制技术和流排序控制技术,有自研的,也有开放源码的。但是,为了思考新一代大统计数据发动机的方向以及未来趋势,他们做了很多新控制技术的调研。
紧密结合大量调研结果,他们最后得出的结论是:解决通用型大统计数据排序需求,批流融合的排序发动机,才是大统计数据控制技术的发展方向,并且最终他们优先选择了Flink。
但2015年的Flink还不够成熟,无论是规模却是稳定性尚未历经实践。最后他们决定在穆萨内部建立一个Flink分支,对Flink做大量的修改和完善,让其适应穆萨巴巴这种超大规模的销售业务情景。在这个过程当中,他们团队不仅对Flink在性能和稳定性上做出了很多改进和优化,同时在核心架构和功能上也进行了大量创新和改进,并将其贡献给社区,例如:Flink新的分布式架构,存量Checkpoint机制,基于Credit-based的网络流控机制和Streaming SQL等。
穆萨巴巴对Flink社区的贡献
他们举两个设计案例,第一个是穆萨巴巴重构了Flink的分布式架构,将Flink的Job调度和资源管理做了一个清晰的分层和解耦。这样做的首要好处是Flink可以原生的跑在各种完全相同的开放源码资源管理器上。经过这套分布式架构的改进,Flink可以原生地跑在Hadoop Yarn和Kubernetes这两个最常见的资源管理系统之上。同时将Flink的任务调度从集中式调度改为了分布式调度,这样Flink就可以全力支持更大规模的集群,以及得到更好的资源隔离。
另一个是实现了存量的Checkpoint机制,因为Flink提供了有状态的排序和定期的Checkpoint机制,如果内部的统计数据越来越多,不停地做Checkpoint,Checkpoint会越来越大,最后可能导致做不出来。提供了存量的Checkpoint后,Flink会自动地发现哪些统计数据是存量变化,哪些统计数据是被修改了。同时只将这些修改的统计数据进行持久化。这样Checkpoint不会随着时间的运行而越来越难做,整个系统的性能会非常地平稳,这也是他们贡献给社区的一个很重大的特性。
经过2015年到2017年对Flink Streaming的能力完善,Flink社区也逐渐成熟起来。Flink也成为在Streaming领域最主流的排序发动机。因为Flink最早期想做一个流批标准化的大统计数据发动机,2018年已经启动这项工作,为了实现这个目标,穆萨巴巴提出了新的标准化API架构,标准化SQL解决计划,同时流排序的各种功能得到完善后,他们认为批排序也须要各种各样的完善。无论在任务调度层,却是在数据Shuffle层,在容错性,易用性上,都须要完善很多工作。
篇幅原因,下面主要和大家分享两点:
标准化 API Stack
标准化 SQL计划
先来看下目前Flink API Stack的一个现状,调研过Flink或者使用过Flink的合作开发者应该知道。Flink有2套基础的API,两套是DataStream,两套是DataSet。DataStream API是针对INS13ZD处置的使用者提供,DataSet API是针对格式化使用者提供,但是这三套API的执行路径是完全不一样的,甚至须要生成完全相同的Task去执行。所以这跟得到标准化的API是有冲突的,而且这个也是不完善的,不是最终的解法。在Runtime之上首先是要有一个批流标准化融合的基础API层,他们希望可以标准化API层。
因此,他们在新架构中将采用一个DAG(有限无环图)API,作为一个批流标准化的API层。对于这个有限无环图,批排序和流排序不须要泾渭分明的表达出来。只须要让合作开发者在完全相同的节点,完全相同的边上定义完全相同的属性,来规划统计数据是流属性却是批属性。整个拓扑是可以融合批流标准化的语义表达,整个排序无需区分是流排序却是批排序,只须要表达自己的需求。有了这套API后,Flink的API Stack将得到标准化。
除了标准化的基础API层和标准化的API Stack外,同样在上层标准化SQL的解决计划。流和批的SQL,可以认为流排序有统计数据源,批排序也有统计数据源,他们可以将这两种源都模拟成统计数据表。可以认为流统计数据的统计数据源是一张不断更新的统计数据表,对于格式化的统计数据源可以认为是一张相对静止的表,没有更新的统计数据表。整个统计数据处置可以当做SQL的一个Query,最终产生的结果也可以模拟成一个结果表。
对于流排序而言,它的结果表是一张不断更新的结果表。对于格式化而言,它的结果表是相当于一次更新完成的结果表。从整个SOL语义上表达,流和批是可以标准化的。此外,无论是INS13ZDSQL,却是格式化SQL,都可以用同一个Query来表达复用。这样以来流批都可以用同一个Query优化或者解析。甚至很多流和批的算子都是可以复用的。
Flink的未来方向
首先,穆萨巴巴却是要立足于Flink的本质,去做一个全能的标准化大统计数据排序发动机。将它在生态和情景上进行落地。目前Flink已经是一个主流的流排序发动机,很多互联网公司已经达成了共识:Flink是大统计数据的未来,是最好的流排序发动机。下一步很重要的工作是让Flink在批排序上有所突破。在更多的情景下落地,成为一种主流的批排序发动机。然后进一步在流和批之间进行无缝的切换,流和批的界限越来越模糊。用Flink,在一个排序中,既可以有流排序,又可以有批排序。
第二个方向就是Flink的生态上有更多语言的全力支持,不仅仅是Java,Scala语言,甚至是机器学习下用的Python,Go语言。未来他们希望能用更多丰富的语言来合作开发Flink排序的任务,来描述排序方法论,并和更多的生态进行对接。
最后不得已说AI,因为现在很多大统计数据排序的需求和统计信息量都是在全力支持很火爆的AI情景,所以在Flink流批生态完善的基础上,将继续往上走,完善上层Flink的Machine Learning算法库,同时Flink往上层也会向成熟的机器学习,深度学习去集成。比如可以做Tensorflow On Flink, 让大统计数据的ETL统计数据处置和机器学习的Feature排序和特征排序,训练的排序等进行集成,让合作开发者能够同时享受到多种生态给大家带来的好处。
2018年12月20日-21日,首届Flink Forward China峰会将在北京国家会议中心举办。点击文末”方可报名。
穆萨巴巴数学大赛赛题、官方参考答案现已公布。
穆萨巴巴机器智能数学大赛”,方可下载。
↑ 翘首以盼等你关注
你可能还喜欢
点击下方图片方可阅读
如何量化考核控制技术人的 KPI?
关注「穆萨控制技术」
把握前沿控制技术脉搏