阿里蒋晓伟谈计算引擎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 .另外针对状态数据的 ...
随机推荐
- python_网络编程
网络ISO(国际标准化组织)--->网络体系结构标准(OSI模型)OSI: 网络信息传输比较复杂需要很多功能协同-->将功能分开,降低耦合度,让每个模块完成一定的功能-->将这些模块 ...
- 最小生成树与最短路径--C语言实现
接昨天,在这里给出图的其中一种应用:最小生成树算法(Prime算法和Kruskal算法).两种算法的区别就是:Prime算法以顶点为主线,适合用于顶点少,边密集的图结构:Kruskal算法以边为主线, ...
- KubeSphere 日志备份与恢复实践
为什么需要日志备份 KubeSphere 日志系统使用 Fluent Bit + ElasticSearch 的日志采集存储方案,并通过 Curator 实现对 Index 的生命周期管理,定期清理久 ...
- luogu P3913 车的攻击 |数学
题目描述 N×N 的国际象棋棋盘上有KK 个车,第ii个车位于第R_i行,第C_i列.求至少被一个车攻击的格子数量. 车可以攻击所有同一行或者同一列的地方. 输入格式 第1 行,2 个整数N,K. 接 ...
- VSCode 入门
一 基本布局 二 主题设置 2.1 选择颜色主题 方式一 文件 -> 首选项 -> 颜色主题 -> 上下按键 切换预览 -> enter选择 或者 CTRL + K CTRL ...
- [TimLinux] Python IDE工具
1. 首推IDE工具PyCharm JetBrains公司推出的系列IDE工具中支持Python编译语言的开发工具,基本上可以认为是行业第一IDE工具了,分为社区版和专业版,可以创建纯Python单文 ...
- linux-export
使自定义普通变量转换为环境变量: 1. env查看环境变量 2. 设置临时环境变量,关机重启时不生效. export path=$path:/usr/sbin/ 3. 修改profile文件,关机重启 ...
- Python3 常用的几个内置方法
目录 max()/min() filter() 过滤 map() 映射 sorted筛选 reduce()减少 max()/min() 传入一个参数 (可迭代对象), 返回这个可迭代对象中最大的元素 ...
- HTML 02
form表单 能够获取用户输入(包括输入, 选择和上传文件) 将用户的输入内容全部发送给后端 参数 action 向何处提交 不写, 默认朝当前页面所在地址提交数据 全写路径 (https://www ...
- Python3 常用模块3
目录 numpy模块 创建numpy数组 numpy数组的属性和用法 matplotlib模块 条形图 直方图 折线图 散点图 + 直线图 pandas模块 numpy模块 numpy模块可以用来做数 ...