加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

阿里巴巴Blink正式开源,重要优化点解读

发布时间:2019-01-29 20:05:05 所属栏目:移动互联 来源:大沙
导读:Apache Flink 是德国柏林工业大学的几个博士生和研究生从学校开始做起来的项目,早期叫做 Stratosphere。2014 年,StratoSphere 项目中的核心成员从学校出来开发了 Flink,同时将 Flink 计算的主流方向定位为流计算,并在同年将 Flink 捐赠 Apache,后来快
副标题[/!--empirenews.page--]

Apache Flink 是德国柏林工业大学的几个博士生和研究生从学校开始做起来的项目,早期叫做 Stratosphere。2014 年,StratoSphere 项目中的核心成员从学校出来开发了 Flink,同时将 Flink 计算的主流方向定位为流计算,并在同年将 Flink 捐赠 Apache,后来快速孵化成为 Apache 的顶级项目。

阿里巴巴Blink正式开源,重要优化点解读

阿里巴巴在 2015 年开始尝试使用 Flink。但是阿里的业务体量非常庞大,挑战也很多。彼时的 Flink 不管是规模还是稳定性尚未经历实践,成熟度有待商榷。为了把这么大的业务体量支持好,我们不得不在 Flink 之上做了一系列的改进,所以阿里巴巴维护了一个内部版本的 Flink,它的名字叫做 Blink。

基于 Blink 的计算平台于 2016 年正式上线。截至目前,阿里绝大多数的技术部门都在使用 Blink。Blink 一直在阿里内部错综复杂的业务场景中锻炼成长着。对于内部用户反馈的各种性能、资源使用率、易用性等诸多方面的问题,Blink 都做了针对性的改进。

虽然现在 Blink 在阿里内部用的最多的场景主要还是流计算,但是在批计算场景也有不少业务上线使用了。例如,搜索和推荐的算法业务平台就同时将 Blink 用于流计算和批处理。Blink 被用来实现了流批一体化的样本生成和特征抽取流程,能够处理的特征数达到了数千亿,而且每秒钟能处理数亿条消息。在这个场景的批处理中,我们单个作业处理的数据量已经超过 400T,并且为了节省资源,我们的批处理作业是和流计算作业以及搜索的在线引擎运行在同样的机器上。流批一体化已经在阿里巴巴取得了极大的成功,我们希望这种成功以及阿里巴巴内部的经验都能够带回给社区。

Blink 开源的背景

其实从我们选择 Flink 的第一天开始,我们就一直和社区紧密合作。过去的这几年我们也一直在把阿里对 Flink 的改进推回社区。从 2016 年开始我们已经将流计算 SQL 的大部分功能、针对 runtime 的稳定性和性能优化做的若干重要设计都推回了社区。但是 Blink 本身发展迭代的速度非常快,而社区有自己的步伐,很多时候可能无法把我们的变更及时推回去。对于社区来说,一些大的功能和重构,需要达成共识后,才能被接受,这样才能更好地保证开源项目的质量,但是同时就会导致推入的速度变得相对较慢。

经过这几年的开发迭代,我们这边和社区之间的差距已经变得比较大了。Blink 有一些很好的新功能,比如性能优越的批处理功能,在社区的版本是没有的。在过去这段时间里,我们不断听到有人在询问 Blink 的各种新功能,期望 Blink 尽快开源的呼声越来越大。我们一直在思考如何开源的问题。一种方案就是和以前一样,继续把各种功能和优化分解,逐个和社区讨论,慢慢地推回 Flink,但这显然不是大家所期待的。另一个方案,就是先完整地尽可能多地把代码开源,让社区的开发者能够尽快试用起来。 第二个方案很快收到社区广大用户的支持。因此,从 2018 年年中开始我们就开始做开源的相关准备。经过半年的努力,我们终于把大部分 Blink 的功能梳理好,开源了出来。

Blink 开源的方式

**我们把代码贡献出来,是为了让大家能先尝试一些他们感兴趣的功能。Blink 永远不会单独成为一个独立的开源项目来运作,它一定是 Flink 的一部分。开源后我们期望能找到办法以最快的方式将 Blink merge 到 Flink 中去。**Blink 开源只有一个目的,就是希望 Flink 做得更好。

Apache Flink 是一个社区项目,Blink 以什么样的形式进入 Flink 是最合适的,怎么贡献是社区最希望的方式,我们都要和社区一起讨论。在过去的一段时间内,我们在 Flink 社区征求了广泛的意见,大家一致认为将本次开源的 Blink 代码作为 Flink 的一个 branch 直接推回到 Apache Flink 项目中是最合适的方式。并且我们和社区也一起讨论规划出一套能够快速 merge Blink 到 Flink master 中的方案(具体细节可以查看 Flink 社区正在讨论的 FLIP32)。

我们期望这个 merge 能够在很短的时间内完成。这样我们之后的 Machine Learning 等其他新功能就可以直接推回到 Flink master。相信用不了多久,Flink 和 Blink 就完全合二为一了。在那之后,阿里巴巴将直接使用 Flink 用于生产,并同时协助社区一起来维护 Flink。

本次开源的 Blink 的主要功能和优化点

本次开源的 Blink 代码在 Flink1.5.1 版本之上,加入了大量的新功能,以及在性能和稳定性上的各种优化。

主要贡献包括:阿里巴巴在流计算上积累的一些新功能和性能的优化,一套完整的(能够跑通全部 TPC-H/TPC-DS,能够读取 Hive meta 和 data)高性能 Batch SQL,以及一些以提升易用性为主的功能(包括支持更高效的 interactive programming,与 zeppelin 更紧密的结合,以及体验和性能更佳的 Flink web)。

未来我们还将继续给 Flink 贡献在 AI、IoT 以及其他新领域的功能和优化。更多的关于这一版本 Blink release 的细节,请参考 Blink 代码根目录下的 README.md 文档。下面,我来分模块介绍下 Blink 主要的新的功能和优化点。

Runtime

为了更好地支持 batch processing,以及解决阿里巴巴大规模生产场景中遇到的各种挑战,Blink 对 Runtime 架构、效率、稳定性方面都做了大量改进。

在架构方面,首先 Blink 引入了 Pluggable Shuffle Architecture,开发者可以根据不同的计算模型或者新硬件的需要实现不同的 shuffle 策略进行适配。此外 Blink 还引入新的调度架构,容许开发者根据计算模型自身的特点定制不同调度器。为了优化性能,Blink 可以让算子更加灵活的 chain 在一起,避免了不必要的数据传输开销。在 Pipeline Shuffle 模式中,使用了 ZeroCopy 减少了网络层内存消耗。在 BroadCast Shuffle 模式中,Blink 优化掉了大量的不必要的序列化和反序列化开销。此外,Blink 提供了全新的 JM FailOver 机制,JM 发生错误之后,新的 JM 会重新接管整个 JOB 而不是重启 JOB,从而大大减少了 JM FailOver 对 JOB 的影响。

最后,Blink 也开发了对 Kubernetes 的支持。不同于 Standalone 模式在 Kubernetes 上的拉起方式,在基于 Flink FLIP6 的架构上基础之上,Blink 根据 job 的资源需求动态的申请 / 释放 Pod 来运行 TaskExecutor,实现了资源弹性,提升了资源的利用率。

SQL/TableAPI

阿里巴巴Blink正式开源,重要优化点解读

SQL/TableAPI 架构上的重构和性能的优化是 Blink 本次开源版本的一个重大贡献。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读