被社区关注的Blink开源到底向上游贡献了什么?
导读:如同我们去年 12 月在 Flink Forward China 峰会所约,阿里巴巴内部 Flink 版本 Blink 将于 2019 年 1 月底正式开源。今天,我们终于等到了这一刻。
Blink 简介Apache Flink 是德国柏林工业大学的几个博士生和研究生从学校开始做起来的项目,早期叫做 Stratosphere。2014 年,StratoSphere 项目中的核心成员从学校出来开发了 Flink,同时将 Flink 计算的主流方向定位为流计算,并在同年将 Flink 捐赠 Apache 基金会,后来快速孵化成为 Apache 基金会的顶级项目。现在 Flink 是业界公认的最好的大数据流计算引擎。 阿里巴巴在 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 合并到 Flink 中去。Blink 开源只有一个目的,就是希望 Flink 做得更好。Apache Flink 是一个社区项目,Blink 以什么样的形式进入 Flink 是最合适的,怎么贡献是社区最希望的方式,我们都要和社区一起讨论。 在过去的一段时间内,我们在 Flink 社区征求了广泛的意见,大家一致认为将本次开源的 Blink 代码作为 Flink 的一个分支直接推回到 Apache Flink 项目中是最合适的方式。并且我们和社区也一起讨论规划出一套能够快速合并 Blink 到 Flink 主干中的方案(具体细节可以查看 Flink 社区正在讨论的 FLIP32)。我们期望这个合并能够在很短的时间内完成。这样我们之后的机器学习等其他新功能就可以直接推回到 Flink 主干。相信用不了多久,Flink 和 Blink 就完全合二为一了。在那之后,阿里巴巴将直接使用 Flink 用于生产,并同时协助社区一起来维护 Flink。 本次开源的 Blink 的主要功能和优化点本次开源的 Blink 代码在 Flink 1.5.1 版本之上,加入了大量的新功能,以及在性能和稳定性上的各种优化。主要贡献包括,阿里巴巴在流计算上积累的一些新功能和性能的优化,一套完整的(能够跑通全部 TPC-H/TPC-DS,能够读取 Hive 元数据和数据)高性能 Batch SQL,以及一些以提升易用性为主的功能(包括支持更高效的交互式编程,与 zeppelin 更紧密的结合, 以及体验和性能更佳的 Flink web)。未来我们还将继续给 Flink 贡献在 AI、IoT 以及其他新领域的功能和优化。更多的关于这一版本 Blink 的细节,请参考 Blink 代码根目录下的 README.md 文档。下面,我来分模块介绍下 Blink 主要的新的功能和优化点。 Runtime为了更好的支持批处理,以及解决阿里巴巴大规模生产场景中遇到的各种挑战,Blink 对 Runtime 的架构、效率、稳定性方面都做了大量改进。在架构方面,首先 Blink 引入了可插拔 Shuffle 架构,开发者可以根据不同的计算模型或者新硬件的需要实现不同的 Shuffle 策略进行适配。此外 Blink 还引入新的调度架构,容许开发者根据计算模型自身的特点定制不同调度器。为了优化性能,Blink 可以让算子更加灵活的链在一起,避免了不必要的数据传输开销。在 Pipeline Shuffle 模式中,使用了 ZeroCopy 减少了网络层内存消耗。在 BroadCast Shuffle 模式中,Blink 优化掉了大量的不必要的序列化和反序列化开销。 (编辑:ASP站长网) |