阿里蒋晓伟谈计算引擎Flink和Spark的异同与优势

2,433 阅读6分钟

本文整理自云栖社区之前对阿里搜索事业部资深搜索专家蒋晓伟老师的一次采访,蒋晓伟老师,认真而严谨。在加入阿里之前,他曾就职于西雅图的脸书,负责过调度系统,Timeline Infra和Messenger的项目。而后在微软的SQL Server引擎担任过Principal Engineer,负责关系数据库的架构工作。2014年加入阿里以后,作为阿里搜索事业部资深搜索专家,他负责搜索工程的数据团队。

谈起大数据框架,业内尤其对于开源大数据生态圈的许多优秀的计算框架耳熟能详,比如Spark、Hadoop、Storm等。但对于Apache基金会的顶级项目的Flink,知道的都比较有限。而更多是对比Spark,比如知乎的这篇帖子讨论的就是“Apache Flink和Apache Spark有什么异同?它们的发展前景分别怎样?”

为了帮助更多朋友了解Flink,和阿里阿里流计算和批处理引擎Blink。云栖社区特别采访了蒋晓伟。

云栖社区:相比Spark、Hadoop、Storm等,是什么样的场景需求让阿里搜索团队选择了Flink?

蒋晓伟:首先我们希望有个流计算和批处理的一体化处理方案。Spark和Flink都具有流和批处理能力,但是他们的做法是相反的。Spark Streaming是把流转化成一个个小的批来处理,这种方案的一个问题是我们需要的延迟越低,额外开销占的比例就会越大,这导致了Spark Streaming很难做到秒级甚至亚秒级的延迟。Flink是把批当作一种有限的流,这种做法的一个特点是在流和批共享大部分代码的同时还能够保留批处理特有的一系列的优化。因为这个原因,如果要用一套引擎来解决流和批处理,那就必须以流处理为基础,所以我们决定先选择一个优秀的流处理引擎。从功能上流处理可以分为无状态的和有状态两种。在流处理的框架里引入状态管理大大提升了系统的表达能力,让用户能够很方便地实现复杂的处理逻辑,是流处理在功能上的一个飞跃。流处理引擎对一致性的支持可以分为:best effort,at least once 和 exactly once。Exactly once的语义才能真正保证完全的一致性,Flink采用的架构比较优雅地实现了exactly once的有状态流处理。另外在保证了一致性的前提下Flink在性能上也是相当优秀的。总结一下,我们觉得在流处理方面Flink在功能,延迟,一致性和性能上综合来看是目前社区最优秀的。所以我们决定采用它来实现流和批的一体化方案。最后,还有一个很重要的原因是Flink有一个比较活跃的社区。

云栖社区:如何看待Flink、Spark、Hadoop、Storm等技术发展和不同场景下的优势对比?比如与Spark相反,Flink把批处理化作流处理,这种方式在使用时是否有什么限制?

蒋晓伟:大数据是从批处理开始的,所以很多系统都是从批处理做起,包括Spark。在批处理上Spark有着较深的积累,是一个比较优秀的系统。随着技术的发展,很多原来只有批处理的业务都有了实时的需求,流处理将会变得越来越重要,甚至成为大数据处理的主要场景。Flink把批当作流来处理有个很重要的优点是如果我们在流中引入一个blocking的算子,我们还能接着做批处理特有的优化,这个是以流处理为基础的计算引擎的一大优势。所以我认为在架构上这种设计在批处理上是可以做到最优的,而且比传统的做法还有一些特别的优势,当然工程上的实现也很重要。

云栖社区:阿里巴巴搜索的流计算和批处理引擎的Blink是基于Apache Flink项目并且在API兼容的。那么在Flink使用过程中有趟过哪些坑?Blink在哪些方面做出了改进?

蒋晓伟:Flink在架构上有很多创新,是非常领先的。但是在工程的实现上有一些不足之处。比如说不同的job的任务可能运行在同一个进程里,这样一个job的问题可能影响其他job的稳定性。Flink的工程实现也不能把集群的资源最合理地利用起来。Blink重新实行了Yarn的结合,完全解决了这些问题。另外Flink是通过checkpoint的机制来保证一致性的,但原有的机制效率比较低,导致在状态较大的时候不可用,Blink大大优化了checkpoint,能够高效地处理很大的状态。稳定性和scalability在生产上都是至关重要的,通过在大集群上的锤炼,Blink解决了一系列这方面的问题和瓶颈,已经成为一个能够支撑核心业务的计算引擎。同时我们扩展了Flink的Streaming SQL层,使得它能够比较完备地支持较复杂的业务。

云栖社区:是否有反馈Flink社区的计划?以及您认为Flink未来的杀手级应用会是什么?

蒋晓伟:我们正在和Flink的发明者Stephan沟通把Blink反馈回Flink社区,这样才能让社区更强大,而社区更强大我们也会更强大。我们计划的第一步是把Blink的Yarn的实现反馈回去,并且抽象出一个支持不同调度系统的方案。接下来会把我们在checkpoint,稳定性,scalability, 可运维性,SQL等方面的改进和优化都陆续反馈回去。我觉得Flink在流计算上的优势是非常大的,随着在线学习等流计算需求的增长,在这方面Flink一定会大放异彩。

云栖社区:从Facebook、微软到阿里,技术开发经验丰富。那么对于技术开发者的成长,有哪些建议或者经验分享?以及推荐一本最喜欢的技术书籍。

蒋晓伟:我觉得在学习中和工作很重要的一点是遇到任何问题一定要刨根问底,不要停留在现象和一些浅层次的直观的原因上,一定要找到本质。一个比较好的判定标志是你能不能一句话给别人讲清楚。要做到这个可能会让你一开始花更多的时间,甚至觉得自己学得比别人慢很多,但是你学过的每个东西都是完全吃透的,而很多东西的原理是相通的,在一段时间的积累后你会发现学任何新东西就像看说明书一样了。书我还真推荐不了,因为我一般是有问题现查,反正是说明书。

订阅关注微信公众号《大数据技术进阶》,及时获取更多大数据架构和应用相关技术文章!