Google是最早实践大数据的公司,目前大数据繁荣的生态很大一部分都要归功于Google最早的几篇论文,这几篇论文早就了以Hadoop为开端的整个开源大数据生态,但是很可惜的是Google内部的这些系统是无法开源的,在开源生态和云计算兴起之后,Google也是受够了闭源的痛苦,据说为了给用户提供HBase服务,Google还为BigTable写了兼容HBase的API,在Google看来这就是一种羞辱,痛定思痛,Google开始走开源之路,将自己的标准推广给社区,这就是Apache Beam项目诞生的整个大背景。整个Beam项目的演进历史为:

撇开这些八卦,Beam的整个设计理念和架构还是不错的,Beam是一个SDK,也是一个构架于各个底层平台Runner之上的Adapter,Beam对流式计算场景中的所有问题重新做了一次归纳,然后针对这些问题提出了几种不同的解决model,然后再把这些model通过一种统一的语言给实现出来,最终这些Beam程序可以run在任何一个计算平台上(只要平台/Runner实现了对Beam的支持)。通过一个Beam的参与方视图也能看出一个大概的架构:

在图中,终端用户用Beam来实现自己流式计算功能,使用的终端语言可能是Python、Java等,每个语言有一个对应的SDK,用户写出的程序会跑在各个平台/Runner上,每个Runner上都实现了从Beam Pipeline到平台功能的映射。

在任何一个设计开始之前,都先要确定问题,Beam也不例外,在设计者看来在流式计算场景中数据有三个特点,一:数据是非常大的,而且一直在不停产生,理论上是无穷大;二:这些数据的延迟是不可预期的也是不可控的,而且这些乱序是一种天然的行为,无法避免;三:这些数据的用途有可能是记录抽取转换、有可能是用来根据时间窗口做聚合,而且聚合可能是基于当前处理时间processing time,也有可能是根据事件发生时间event time来聚合。Processing time和event time之间是有lag/skew的,如图:

其中虚线是最理想的,表示处理时间和事件时间是相同的,红线是实际上的线,也叫水印线watermark,watermark一般是通过启发式算法算出来的。

接下来从high level的问题中抽象出四个具体的问题:

A:What are you computing,处理的数据是哪种类型,数据转换、聚合或者是两者都有,如图:

B:Where in event time,何时发生,其实是用哪种窗口来框住数据并处理,有固定窗口、滑动窗口、会话这三种模式:

C:When in processing time,何时被处理,如上Watermark图,在这里引入了一个Trigger机制,Trigger决定何时将计算结果发射出去,发射太早会丢失一部分数据,丧失精确性,发射太晚会导致延迟变长,而且会囤积大量数据,何时Trigger是由Watermark来决定的

D:How do refinements relate,如何优化

通过这种model能够保证准确性;功能也比较强大,还能识别出用户的burst行为;各种策略之间的可组合性也非常好,如:

由于策略很多,所以灵活性也很好,如:

模块化和抽象也做的很好,如:

总结:Beam虽然还在孵化之中,但是以Google对大数据的理解,绝对是一个强力的推手,而且Beam对自己的定位是粘合剂,不是一个挑战者,所以该项目看起来还是比较乐观。不过Beam背后隐藏的Google的野心也是非常大的,Beam看起来像个粘合剂,但是是一个事实上的标准,是对流式计算开源生态的一次大一统,相信未来Google会在大数据领域继续推出其他开源产品,对社区生态和云计算的理解也会越来越深。

Apache Beam—透视Google统一流式计算的野心的更多相关文章

  1. Apache Beam,批处理和流式处理的融合!

    1. 概述 在本教程中,我们将介绍 Apache Beam 并探讨其基本概念. 我们将首先演示使用 Apache Beam 的用例和好处,然后介绍基本概念和术语.之后,我们将通过一个简单的例子来说明 ...

  2. Others-阿里专家强琦:流式计算的系统设计和实现

    阿里专家强琦:流式计算的系统设计和实现 更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 阿里云数据事业部强琦为大家带来题为“流式计算的系统设计与实现”的演讲,本 ...

  3. 大数据入门第十六天——流式计算之storm详解(一)入门与集群安装

    一.概述 今天起就正式进入了流式计算.这里先解释一下流式计算的概念 离线计算 离线计算:批量获取数据.批量传输数据.周期性批量计算数据.数据展示 代表技术:Sqoop批量导入数据.HDFS批量存储数据 ...

  4. 流式计算新贵Kafka Stream设计详解--转

    原文地址:https://mp.weixin.qq.com/s?__biz=MzA5NzkxMzg1Nw==&mid=2653162822&idx=1&sn=8c4611436 ...

  5. 流式计算(二)-Kafka Stream

    前面说了Java8的流,这里还说流处理,既然是流,比如水流车流,肯定得有流的源头,源可以有多种,可以自建,也可以从应用端获取,今天就拿非常经典的Kafka做源头来说事,比如要来一套应用日志实时分析框架 ...

  6. 流式计算(一)-Java8Stream

    大约各位看官君多少也听说了Storm/Spark/Flink,这些都是大数据流式处理框架.如果一条手机组装流水线上不同的人做不同的事,有的装电池,有的装屏幕,直到最后完成,这就是典型的流式处理.如果手 ...

  7. Storm简介——实时流式计算介绍

    概念 实时流式计算: 大数据环境下,流式数据将作为一种新型的数据类型,这种数据具有连续性.无限性和瞬时性.是实时数据处理所面向的数据类型,对这种流式数据的实时计算就是实时流式计算. 特征 实时流式计算 ...

  8. 流式计算(三)-Flink Stream 篇一

    原创文章,谢绝任何形式转载,否则追究法律责任! ​流的世界,有点乱,群雄逐鹿,流实在太多,看完这个马上又冒出一个,也不知哪个才是真正的牛,据说Flink是位重量级选手,能流计算,还能批处理, 和其他伙 ...

  9. Java的lamda表达式/函数式接口/流式计算

    在我们看他人code的时候经常会看到,可能会经常看到lambda表达式,函数式接口,以及流式计算.在刚接触这些新功能时,也觉得真的有必要吗?但是现在写多了,发现这个功能确实能简化代码结构,提升编码效率 ...

随机推荐

  1. Mac 下升级 vim 并自己配置 vim 的过程

    1.升级 vim 我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim -- ...

  2. [ZJOI2007]棋盘制作

    题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳. 而我们的 ...

  3. 【bzoj4445 scoi2015】小凸想跑步

    题目描述 小凸晚上喜欢到操场跑步,今天他跑完两圈之后,他玩起了这样一个游戏. 操场是个凸 nn 边形, nn 个顶点按照逆时针从 00 ∼ n - 1n−1 编号.现在小凸随机站在操场中的某个位置,标 ...

  4. 2015 多校联赛 ——HDU5289(二分+ST)

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  5. hihocoder #1142 : 三分·三分求极值

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 这一次我们就简单一点了,题目在此: 在直角坐标系中有一条抛物线y=ax^2+bx+c和一个点P(x,y),求点P到抛物线的 ...

  6. hdu 5592 BestCoder Round #65(树状数组)

    题意: ZYB有一个排列PP,但他只记得PP中每个前缀区间的逆序对数,现在他要求你还原这个排列. (i,j)(i < j)(i,j)(i<j)被称为一对逆序对当且仅当A_i>A_jA ...

  7. THUPC2017 抱大腿记

    Day 0: 移步http://www.cnblogs.com/juruolty/p/6854848.html Day 1: 来到了清华大学. 见到了zrt巨巨. 又发了件衣服,我们开始看别的队的名字 ...

  8. Python的数据类型——字符串

    一.字符串的误解 计算机系统的每个内存单元都是唯一并且连续的物理地址,字符串在内存中一旦创建就被 操作系统分配一块唯一并且连续的地址.计算机系统不允许我们修改字符串中的内容,一旦我想 试图进行修改,系 ...

  9. WebStorm配置node.js调试

    最近因为工作关系,一直在做node.js的开发,学习了koa框架,orm框架sequelize,以及swagger文档的配置.但是,最近因为swagger文档使用了es6的修饰器那么个东西(在java ...

  10. 在右键中添加以管理员运行CMD命令提示符 (进化版)

    直接代码,转过来的 20180316更新添加快捷键A,点右键按A即可: Windows Registry Editor Version 5.00 ; Created by: Shawn Brink ; ...