作者|蔡芳芳采访嘉宾|王峰(花名莫问)
11月28日,FlinkForwardAsia2019在北京国家会议中心召开,阿里在会上发布Flink1.10版本功能前瞻,同时宣布基于Flink的机器学习算法平台Alink正式开源,这也是全球首个批流一体的算法平台,旨在降低算法开发门槛,帮助开发者掌握机器学习的生命全周期。在去年的FlinkForwardChina峰会上,阿里宣布将开源Flink的内部分支Blink,把阿里内部对Flink的优化工作全部开放给开源社区,在业内引发热烈讨论,其中有期待也有怀疑。一年后的今天,阿里是否兑现了去年所作的承诺?Blink的合并工作进展如何?刚刚开源的Alink算法平台有哪些独特之处?AI前线在会上对阿里巴巴资深技术专家、实时计算负责人王峰(花名莫问)进行了独家专访,让我们一起来看看Flink的最新变化,以及阿里基于Flink又有哪些新的工作成果。
自2019年1月起,阿里巴巴逐步将内部维护的Blink回馈给Flink开源社区,目前贡献代码数量已超过100万行。国内包括腾讯、百度、字节跳动等公司,国外包括Uber、Lyft、Netflix等公司都是Flink的使用者。
今年8月发布的Flink1.9.0是阿里内部版本Blink合并入Flink后的首次发版,在今天的FlinkForward2019大会上,阿里发布了Flink1.10版本功能前瞻,正式版本预计于2020年1月发布。
据介绍,Flink1.10版本可以看作一个比较重要的里程碑式版本,至此,Blink全部功能都已经进入Flink,包括Blink中比较关键的设计和通用的优化。以下是该版本将包含的主要功能和技术亮点前瞻:
1.完成Blink/Flinkmerge
(1)更加强大的BlinkQueryProcessor
(3)更完善,更细粒度,更灵活的资源管理
2.Hive兼容性生产可用
(1)Meta兼容,支持直接读取Hivecatalog,版本覆盖1.x,2.x到3.x(2)数据格式兼容,支持直接读取Hive表,同时也支持写成Hive表的格式(3)UDF兼容,支持在FlinkSQL内直接调用Hive的UDF,UDTF,UDAF
3.更加强大的Python支持
4.支持原生K8S集成
(1)原生的资源管理,可以根据作业的资源需求动态去申请TaskManager,不需要依赖外部系统或组件(2)更加方便的任务提交,不需要安装kubectl等工具,可以达到和Yarn相似的体验
5.新增多个主流机器学习算法库
(1)包括逻辑回归,随机森林,KMeans等
提问:整个过程中有没有遇到什么比较棘手的问题?莫问:社区是一个相对开放透明的场景,不像自己的项目可以比较随意地改动,而是要走一个民主的过程,包括要经过社区的讨论、大家的认可,要保证代码的质量等。我们既要做到快速推进,还要保证质量和社区的公平性,这个挑战还是很大的。
提问:所以你们怎么平衡这两件事情?
莫问:整个Flink社区的合作模式是比较高效的,社区不同模块的负责人每周都会有视频会议,可能是不同国家的社区讨论,这些都做得非常高效,项目管理做得非常好。在这种机制的保证下,我们可以让代码快速进入同时保证迭代的速度。其实这对工程效率的开发也是非常大的挑战。说白了,我们投入了很多技术人员做这件事,但也不是只看数量。我们投入的很多人手本身就是Apache项目的PMC和Committer,而不完全是普通的工程师,这些人本身对于Apache项目的工作机制和流程都比较熟悉,他们的效率和作战能力不能按一个人这么算。社区就是这样,不是人多的问题,还需要合适的人。
提问:您上午在演讲中提到Flink正在成为一个真正的UnifiedEngine。有趣的是,我们近期已经不止一次听到不同的计算引擎提出类似的说法,比如Spark的核心理念也是成为“统一数据分析平台”,能否请您谈谈Flink的设计理念?二者的统一有什么相同点和不同点?
莫问:Flink的核心理念我们强调过很多次,它的本质计算思想是流处理核心。流处理核心就是所有的都是基于Stream来处理,批可以看作是一个有限的流。像今天提到的在线的StatefulFunction也是EventDriven,所有的Event不停地进入做函数计算,做在线有状态的计算,然后把结果给用户,再不停地迭代。其实在线服务也是无限的,也是不会停止的处理,不停地有人访问,有人处理。Flink的核心是基于流计算的Core,去覆盖Offline和Online,这样它跟Spark还是不太一样的。Spark认为所有东西都是基于Batch的,而流是无数个Batch凑在一起,这一点不太一样。
但大家在宏观上的愿景都是类似的,用一套计算引擎技术或大数据处理的技术,来解决尽量多的场景,这样从用户的角度来说学习成本更低、开发效率更高、运维成本也更低。所以大家的目标和理念是一致的,只不过在实现这个目标的方法上的选择是不一样的。
**提问:下面这个问题我们之前问过Databricks的工程师,今天也想问问您,如果我要做统一的平台,你也要做统一平台,那会不会存在最后到底谁能真正统一谁的问题?
**莫问:我觉得大家并不是说做什么,什么就一定会赢,一定会好。从我个人态度来说,技术还是需要有一定良性的竞争,这样才能相互学习,同时条条大路通罗马,不一定哪一个绝对正确,可能不同场景有不同的偏好或不同的特定区域的需求,或适应的场景不一样。解决类似问题有两三家公司共存,这种状态是比较健康的,就像数据库领域有MySQL、PostgreSQL等,在线服务也类似,起码得有两家大公司在一起竞争,是比较合适的。但最终哪个做得更好,还是取决于是否能把自己的理论做到极致。因为理论是理论,你的理论和我的理论听起来各有千秋,但是谁最后能赢看的是细节,包括用户体验。你是否按照正确的方法在做,细节做得够不够好,而不是大家听起来思路一样就没有区别了。细节和社区生态的发展、推进过程都很重要。
提问:能否先介绍一下FlinkML和Alink的概况,以及二者的关系?
莫问:FlinkML是Flink社区现存的一套机器学习算法库,这一套算法库已经存在很久而且更新比较缓慢。Alink是基于新一代的Flink,完全重新写了一套,跟FlinkML没有代码上的关系。Alink由阿里巴巴大数据团队开发,开发出来以后在阿里巴巴内部也用了,然后现在正式开源出来。
未来我们希望Alink的算法逐渐替换掉FlinkML的算法,可能Alink就会成为新一代版本的FlinkML,当然替换还需要一个比较漫长的过程。Alink包含了非常多的机器学习算法,往Flink贡献或发布的时候也需要比较大的带宽,我们担心整个过程耗时会比较长,所以先把Alink单独开源出来,大家如果有需要的可以先用起来。后面贡献进展比较顺利的情况下,Alink应该能完全合并到FlinkML,也就是直接进入Flink生态的主干,这对于Alink来说是最好的归宿,到这个时候FlinkML就可以跟SparkML完全对应起来了。
提问:除了Alink以外,Flink当前在机器学习领域的工作还有哪些进展?和其他计算引擎相比,您如何评价当前Flink在机器学习和AI领域的工作,它的竞争力足够强吗?
莫问:其实我们还有很多正在进行的工作。机器学习的核心是迭代计算,机器学习训练就是不停地对数据进行迭代训练,训练出来一个模型然后上线。在核心训练的基础上,Flink正在设计新的迭代计算,因为Flink是基于流式计算,所以它的迭代计算可以转化为mini-batch的迭代计算,可以根据数据条目数也可以根据数据段的时长,在流上打出很多细粒度的数据段。
Flink的好处是在流上打细粒度的数据段可行性上没有问题,因为它本来就是纯流式的,截成一段一段没有问题。而Spark的迭代是把一个数据集做一次迭代,再做一次迭代,这个数据集很难切得特别细,切出来一段就是一次任务的运行,细粒度的挑战比较大。Flink的好处是本身可以把粒度截得很细,所以重构原有的迭代计算是可行的。
同时它还可以解决在线训练的问题,比如说互联网的日志流、用户行为是不停产生的,Flink流式迭代可以不间断地处理用户产生的实时数据,可以在线迭代更新,模型可以每隔5分钟更新一次,也可以每隔1分钟更新一次。这样它的模型上线是一个7×24小时环状的更新,这样一套在线学习的体系会给用户带来很大的变化,这个变化不是简单的30%的提升或者是工程上的优化,而是在使用机器学习的理念上会有优化。
这是我们当前正在做的工作,社区里也已经开始讨论了,可能会作为Flink明年1-2个版本的重点。你可以这么认为,Flink去年还是UnifiedEngine,今年开始拥抱AI了,2019年我们做的很多工作是偏SQL的优化,明年我们会更多地切入到AI,就是FlinkML和AI场景的方向上。
**提问:阿里是什么时候决定开源Alink的?**莫问:去年Blink开源的时候,我们就在考虑是否把Alink一起开源了。但是后来觉得,第一个开源还没做,不敢一下子步子迈得这么大,要一步步来,而且Blink开源也要准备很多东西。当时我们没有办法做到两个大的项目同时开源,所以就先把Blink开源做好。
开源是一个很慎重的过程,不能随意想开就开一个。孩子不能管生不管养,要发东西就要有一个长期的计划,要负责任的,得给大家一个很明确的信号,这是有长期计划的,不是放了开源就结束了,以后肯定会有用户问你们放上去以后管不管?如果我们不想好这些问题,对用户来说就适得其反,大家觉得你并没有给大家一个清晰的信号,大家也不敢用。
提问:相比SparkML,Alink的亮点是什么?对于开发者来说在哪些方面会比较有吸引力?
莫问:Alink一是依赖于Flink计算引擎层;第二Flink框架中有UDF的算子,Alink本身对算法做了很多优化,包括在算法实现上做了细节的优化,比如通信、数据访问、迭代数据处理的流程等多方面的优化。基于这些优化可以让算法运行的效率更高,同时我们还做了很多配套工具,让易用性更好。同时Alink还有一个核心技术,就是做了很多FTRL的算法,是天然针对在线学习的。在线学习需要高频快速更新的迭代算法,这种情况下Alink有天然的优势,像今日头条、微博的信息流都会经常遇到这样的在线场景。
在离线学习上Alink跟SparkML对比基本上差不多,只要大家工程化都做得足够好,离线学习无法打出代差,真正的代差一定是设计上的理念不一样。设计上、产品形态、技术形态不一样才会有代差明显的优势。
相比SparkML,我们的基调是批式算法基本一致,包括功能和性能,Alink可以支持算法工程师常用的所有算法,包括聚类、分类、回归、数据分析、特征工程等,这些类型的算法是算法工程师常用的。我们开源之前也对标了SparkML所有的算法,做到了100%对标。除此之外,Alink最大的亮点是有流式算法和在线学习,在自己的特色上能做到独树一帜,这样对用户来说没有短板,同时优势又很明显。
Alink支持的机器学习算法
提问:接下来Flink会按照什么样的频率更新版本?能否透露Flink接下来还会有哪些值得期待的新特性或功能?
莫问:3-4个月,基本上会是一个季度更新一个版本,比如2020年1月份会发1.10,4月份会发1.11。现在还说不好什么时候切2.0,2.0应该会是一个非常有里程碑意义的版本。现在Flink社区可以看到非常多的点,不仅有AI、机器学习,还有今天主题演讲StephanEwen提到的StatefulFunction,也是非常有前景的。其实在线场景还有很多有前景的东西可以挖掘,Serverless(Faas)也是Flink后面的方向。Flink社区有一点非常好,它刚刚演进到1.x版本,还有很大的上升空间,社区的生命力和状态都很好,大家有很多想法想放进去。
提问:未来大数据领域还有哪些新的技术方向或趋势是比较重要的?
莫问:大数据和AI的融合可能是一个很好的机会,大家现在纯玩大数据基本上五花八门什么都玩过了,各种项目层出不穷。AI也是百花争鸣,但其实用户想要的不只是AI,数据在哪?AI没有数据怎么玩?得把特征算好、样本算好才能训练出好的模型。这个模型只有经过不断地迭代反馈才能越来越好。这个过程中数据处理和数据分析非常重要,如果没有一套完整的反馈体系,大数据+AI的链路玩不通。有再好的引擎,如果没有闭环的计算路径也无法真正发挥生产或业务上的效果。所以要把大数据+AI整套处理做成非常易用、好用的解决方案,这是大家最需要的。现在可能一个个零散的点大家已经做到了,很多东西都能找到对应的开源项目,但是需要有一个整体的平台把所有技术串起来。
提问:Flink在一定程度上也想做这样的?
莫问:明年我们会开源一个新的项目AIFlow,目前还没有Ready,我们希望AIFlow可以通过一个工作流程把数据处理、预处理,包括模型的训练、模型管理、模型上线、动态更新,更新完拿到反馈,反馈之后怎么反向优化流程,整个系统串起来。其中每个环节都可以使用不同的引擎来实现,用FlinkOK,用Spark也OK,就看最后哪个好用。比如可以用Flink做大数据处理,TensorFlow做深度学习训练,FlinkML做流式训练,把这些都串联起来给用户提供一个端到端的解决方案,这是很有前景的一个项目。
提问:这是不是跟Databricks的MLflow有点类似?
莫问:AIFlow大于MLflow,因为MLflow只定义了数据格式,AIFlow可能跟Kubeflow更像,AIFlow偏工作流程,MLflow偏重于数据格式,没有覆盖特别完整的工作流程,但我们也不排除MLflow将来越做越大。