You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
6.2 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 083 | 阿里巴巴的大数据故事:流计算引擎发展史
在阿里巴巴的发展过程中,流数据处理一直是业务中很重要的一部分。和数据分析平台不一样,阿里巴巴内部的流数据处理平台有很多套。
在阿里巴巴的流数据发展历程里有两个著名的流引擎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上。这也是阿里巴巴集团内部第一次有某种数据处理产品“一统江山”。
两个流计算引擎和开源社区的交流的不同结局告诉我们,和开源社区打交道,仅仅是提供自认为更加厉害的代码给开源社区是远远不够的。尤其是贡献代码的同时却没有给予社区主要贡献者足够的尊重,往往会让事情往坏的方向发展。和社区的合作需要大量持续的互动和交流,以及对社区主要贡献者的尊重。