阿里蒋晓伟谈计算引擎Flink和Spark的对比
本文整理自云栖社区之前对阿里搜索事业部资深搜索专家蒋晓伟老师的一次采访,蒋晓伟老师,认真而严谨。在加入阿里之前,他曾就职于西雅图的脸书,负责过调度系统,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、微软到阿里,技术开发经验丰富。那么对于技术开发者的成长,有哪些建议或者经验分享?以及推荐一本最喜欢的技术书籍。
蒋晓伟:我觉得在学习中和工作很重要的一点是遇到任何问题一定要刨根问底,不要停留在现象和一些浅层次的直观的原因上,一定要找到本质。一个比较好的判定标志是你能不能一句话给别人讲清楚。要做到这个可能会让你一开始花更多的时间,甚至觉得自己学得比别人慢很多,但是你学过的每个东西都是完全吃透的,而很多东西的原理是相通的,在一段时间的积累后你会发现学任何新东西就像看说明书一样了。书我还真推荐不了,因为我一般是有问题现查,反正是说明书。
订阅关注微信公众号《大数据技术进阶》,及时获取更多大数据架构和应用相关技术文章!


阿里蒋晓伟谈计算引擎Flink和Spark的对比的更多相关文章
- 一文让你彻底了解大数据实时计算引擎 Flink
前言 在上一篇文章 你公司到底需不需要引入实时计算引擎? 中我讲解了日常中常见的实时需求,然后分析了这些需求的实现方式,接着对比了实时计算和离线计算.随着这些年大数据的飞速发展,也出现了不少计算的框架 ...
- 《大数据实时计算引擎 Flink 实战与性能优化》新专栏
基于 Flink 1.9 讲解的专栏,涉及入门.概念.原理.实战.性能调优.系统案例的讲解. 专栏介绍 扫码下面专栏二维码可以订阅该专栏 首发地址:http://www.54tianzhisheng. ...
- Flink学习笔记-新一代Flink计算引擎
说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...
- Apache Flink 为什么能够成为新一代大数据计算引擎?
众所周知,Apache Flink(以下简称 Flink)最早诞生于欧洲,2014 年由其创始团队捐赠给 Apache 基金会.如同其他诞生之初的项目,它新鲜,它开源,它适应了快速转的世界中更重视的速 ...
- 基于Kafka的实时计算引擎如何选择?Flink or Spark?
1.前言 目前实时计算的业务场景越来越多,实时计算引擎技术及生态也越来越成熟.以Flink和Spark为首的实时计算引擎,成为实时计算场景的重点考虑对象.那么,今天就来聊一聊基于Kafka的实时计算引 ...
- 揭秘阿里云EB级大数据计算引擎MaxCompute
日前,全球权威咨询与服务机构Forrester发布了<The Forrester WaveTM: Cloud Data Warehouse, Q4 2018>报告.这是Forrester ...
- 阿里重磅开源首款自研科学计算引擎Mars,揭秘超大规模科学计算
日前,阿里巴巴正式对外发布了分布式科学计算引擎 Mars 的开源代码地址,开发者们可以在pypi上自主下载安装,或在Github上获取源代码并参与开发. 此前,早在2018年9月的杭州云栖大会上,阿里 ...
- 大数据计算引擎之Flink Flink CEP复杂事件编程
原文地址: 大数据计算引擎之Flink Flink CEP复杂事件编程 复杂事件编程(CEP)是一种基于流处理的技术,将系统数据看作不同类型的事件,通过分析事件之间的关系,建立不同的时事件系序列库,并 ...
- 大数据计算引擎之Flink Flink状态管理和容错
这里将介绍Flink对有状态计算的支持,其中包括状态计算和无状态计算的区别,以及在Flink中支持的不同状态类型,分别有 Keyed State 和 Operator State .另外针对状态数据的 ...
随机推荐
- jQuery基于json与cookie实现购物车的方法
/** * 添加商品及数量到购物车cookie中,返回当前商品在cookie中的总数 */ function AddToShoppingCar(id, num, type) { var _num = ...
- Spring Boot 最简单整合Shiro+JWT方式
简介 目前RESTful大多都采用JWT来做授权校验,在Spring Boot 中可以采用Shiro和JWT来做简单的权限以及认证验证,在和Spring Boot集成的过程中碰到了不少坑.便结合自身以 ...
- 区块链学习笔记:D02 区块链的技术发展历史和趋势
对于区块链的技术发展历史,其实在我的印象中也就对比特币有所了解,也听过什么火币之类的玩意,但是具体是什么.怎么运作的就不清楚了... 这次的内容首先是讲解了区块链的技术演进,一张图一目了然,虽然里面涉 ...
- k8s 开船记-触礁:四涡轮发动机撞坏3个引发502故障
(图片来自网络) 非常抱歉,这次开船触礁故障给您带来麻烦了,请您谅解. 在我们昨天发布 k8s 开船记首航博文后,有园友在评论中发来贺词——“泰坦尼克号出发了[狗头]”,借此吉言,今天船就触礁了,还好 ...
- hdu5969最大的位或
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5969 题意:给定自然数l和r ,选取2个整数x,y,满足l <= x <= y <= r ...
- ARTS-S anaconda常用命令
建新的环境 conda create --name py36 python=3.6 显示所有环境 conda info --envs 一键安装 wget https://repo.anaconda.c ...
- Selenium之编辑框操作
编辑框操作: 网页上随处可见的编辑框,有时候编辑框里有默认的提示文字或者当我们需要输入第二次测试数据时,须先用clear()方法清除该元素里的字符串,再输入文本: 那么如何获取输入框已经输入的文本内容 ...
- 超酷3D照片展示效果
@{ Layout = null; } <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www. ...
- Java实现数列的排列组合
定义: 排列:从给定个数的元素中取出指定个数的元素,进行排序 组合:从给定个数的元素中仅取出指定个数的元素,不考虑排序 公式: 从n个元素中取出m个元素进行排序的个数: A(m,n)=n(n-1)(n ...
- 【Taro】363- 玩转 Taro 跨端之 flex 布局篇
Taro 是一套遵循 React 语法规范的跨平台开发解决方案,但是目前当我们使用 Taro 的时候,在不同平台上的开发体验还有不一致的地方,所以我们也都期待有一套跨平台统一的解决方案,能够以最小差异 ...