108|阿里巴巴的大数据故事:流计算引擎发展史
文章目录
在阿里巴巴的发展过程中,流数据处理一直是业务中很重要的一部分。和数据分析平台不一样,阿里巴巴内部的流数据处理平台有很多套。
在阿里巴巴的流数据发展历程里,有两个著名的流引擎 JStorm 和 Blink 依然还在产生着深远的影响。这种影响并不仅仅在阿里巴巴集团的内部,并且扩散到了全球的开源世界。比起其他用于集团内部的流计算引擎,它们更被人所熟知,今天我们就来重点分析一下这两个流计算引擎的发展。
我们先来说说 Storm 和 JStorm
Storm 是被 Twitter 收购以后才开源出来的流计算引擎。阿里巴巴集团是在封仲淹带领的团队下才开始使用 Storm 的。
我在之前讲 Storm 的时候说过,这种流计算引擎是用一种比较小众的函数式编程语言 Clojure 开发出来的。国内的 Clojure 专家屈指可数,因此阿里巴巴使用 Storm 时遇到了很多的问题。
毕竟有些时候需要去增加或者改变一些功能,而这也就意味着需要对系统进行改进或者定制,但是 Clojure 语言十分小众,懂这种编程语言的人尚且不多,更不用说专业去修改了,所以,这些都决定了这种工作非常难以展开。
鉴于 Storm 十分难以改进和定制,又是当时开源世界里最成熟的流计算引擎。于是,从 2012 年开始,阿里巴巴决定用 Java 对 Storm 进行重写,这就是 JStorm 项目的由来。
按照封仲淹的观点来说,JStorm 就是 Storm 二次开发的产物。它可以让用户无缝地从 Storm 迁移到 JStorm。
阿里巴巴选择用 Java 进行开发,这让开发进度明显加快。而且,源于阿里巴巴的应用规模、对数据实时性等种种要求,团队对 JStorm 也进行了很多的优化。可以这么说,JStorm 的出现,解决了 Storm 存在的很多问题。
2015 年 11 月 19 日,阿里巴巴集团正式向 Apache 基金会捐赠了 JStorm。JStorm 成为了 Apache Storm 下面的一个子项目,并在 Apache 基金会里继续孵化。
那段时间,JStorm 的作者们对于开源表现出非常大的积极性。封仲淹那时也表示,整个社区的 Storm 2.0 会基于阿里巴巴的 JStorm,用 Java 语言进行开发。
然而世事无常,JStorm 在 Apache 的孵化器里待了快两年,依然没有成为 Apache 基金会的顶级项目。而 Storm2.0 这个以阿里巴巴 JStorm 为主的开发项目更是连影子都没有见到。
对于此事,我非常好奇,但并不真正知晓其答案。只是有次听到一个 Apache 圈内人士聊到过,说阿里巴巴和 Storm 社区之间似乎有了矛盾。
再来说说 Flink 和 Blink
Flink 是德国柏林工业大学设计的一个流计算引擎,现在是 Apache 的顶级开源项目。Flink 这个引擎从模型的角度来看是非常先进的,但是在工程实现上却相对薄弱一些。
Flink 也被阿里巴巴集团用到了自己的生产环境中,项目的领导者是曾经在微软 SQL Server 组以及 Facebook 都待过的数据库专家蒋晓伟(花名“量仔”)。
他在接受采访时表示,在 Spark 和 Flink 这两个引擎中,Flink 的设计理念更为先进一些,也更符合阿里巴巴对流计算引擎的要求,这恰恰也是他的团队选择这个引擎的原因。
当然,阿里巴巴集团并没有把 Flink 拿来直接使用,而是对 Flink 进行了大量的、全方位的改造,不仅提高了 Flink 的性能,而且改进了不少功能。这个项目在阿里巴巴内部叫作 Blink,是阿里巴巴集团内部很多业务的流处理引擎,其重要地位可见一斑。
Blink 目前还未开源,但在与社区的合作上,Blink 团队和 Flink 的开发者之间保持了更为友好的关系。Flink 的开发团队多次在公开场合感谢 Blink 团队对 Flink 项目的贡献,Blink 团队也把很多功能都反馈到了 Flink 的代码库里。
为什么 JStorm 和 Blink 同为由阿里巴巴主导的,针对 Apache 已有项目改良的产物,却在和开源社区的互动以及对开源社区的影响方面有着不同的结果。我想,这其中大概有几方面的原因。
首先,Flink 是后起之秀,又来自德国,还是从学校里出来的。在 Flink 流进市场的时候,北美的主要互联网企业要么已经使用了自研的流计算引擎,要么已经基于开源的流计算引擎开展了业务,不太可能短期内更新流计算引擎到 Flink,所以 Flink 本身就需要大客户的支撑,阿里巴巴的出现恰逢其时。
其次是 Flink 团队和阿里巴巴团队的互补性比较强。前者理论基础好,但是没有工业界的开发经验,后者工业界开发经验却很足,这也就让双方的合作有了基础。
最后,也可能是最重要的一点就是,这还是一个面子问题。JStorm 的做法是把 Storm 的整个代码库用另外一个语言完全重写了一遍,这无疑是一种比较得罪人的做法。而 Blink 在贡献回自己的代码时,是在 Flink 原有代码基础上改的,并且改动时也和 Flink 的人做了仔细协商。我想,也许就是这两种不同的合作态度,决定了两个项目的不同结果。
除了这两个流计算引擎以外,阿里巴巴内部还有其他一些流计算引擎(包括 Max Compute 组自己开发的,一个完全和开源社区无关的流计算引擎),但是这些引擎公开的消息很少,我就算是有心想研究它们,却也不知道从何下手了。
不过最新消息称,经过多年不同引擎之间的内部 PK,阿里巴巴在 2018 年终于确定了:未来 Blink 会是阿里巴巴集团统一的流计算引擎。
JStorm 和其他的流计算引擎上的业务都会慢慢迁移过来,最终整个公司的所有流计算引擎的开发和维护资源都会集中到 Blink 上。这也是阿里巴巴集团内部第一次有某种数据处理产品“一统江山”。
两个流计算引擎和开源社区的交流的不同结局告诉我们,和开源社区打交道,仅仅是提供自认为更加厉害的代码给开源社区是远远不够的。尤其是贡献代码的同时却没有给予社区主要贡献者足够的尊重,往往会让事情往坏的方向发展。和社区的合作需要大量持续的互动和交流,以及对社区主要贡献者的尊重。
文章作者 anonymous
上次更新 2024-02-08