大规模数据处理实战
蔡元楠
Google Brain资深工程师
立即订阅
8395 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 从这里开始,带你走上硅谷一线系统架构师之路
免费
模块一 | 直通硅谷大规模数据处理技术 (3讲)
01 | 为什么MapReduce会被硅谷一线公司淘汰?
02 | MapReduce后谁主沉浮:怎样设计下一代数据处理技术?
03 | 大规模数据处理初体验:怎样实现大型电商热销榜?
模块二 | 实战学习大规模数据处理基本功 (8讲)
04 | 分布式系统(上):学会用服务等级协议SLA来评估你的系统
05 | 分布式系统(下):架构师不得不知的三大指标
06 | 如何区分批处理还是流处理?
07 | Workflow设计模式:让你在大规模数据世界中君临天下
08 | 发布/订阅模式:流处理架构中的瑞士军刀
09 | CAP定理:三选二,架构师必须学会的取舍
10 | Lambda架构:Twitter亿级实时数据分析架构背后的倚天剑
11 | Kappa架构:利用Kafka锻造的屠龙刀
模块三 | 抽丝剥茧剖析Apache Spark设计精髓 (10讲)
12 | 我们为什么需要Spark?
13 | 弹性分布式数据集:Spark大厦的地基(上)
14 | 弹性分布式数据集:Spark大厦的地基(下)
15 | Spark SQL:Spark数据查询的利器
16 | Spark Streaming:Spark的实时流计算API
17 | Structured Streaming:如何用DataFrame API进行实时数据分析?
18 | Word Count:从零开始运行你的第一个Spark应用
19 | 综合案例实战:处理加州房屋信息,构建线性回归模型
20 | 流处理案例实战:分析纽约市出租车载客信息
21 | 深入对比Spark与Flink:帮你系统设计两开花
模块四 | Apache Beam为何能一统江湖 (8讲)
22 | Apache Beam的前世今生
23 | 站在Google的肩膀上学习Beam编程模型
24 | PCollection:为什么Beam要如此抽象封装数据?
25 | Transform:Beam数据转换操作的抽象方法
26 | Pipeline:Beam如何抽象多步骤的数据流水线?
27 | Pipeline I/O: Beam数据中转的设计模式
28 | 如何设计创建好一个Beam Pipeline?
29 | 如何测试Beam Pipeline?
模块五 | 决战 Apache Beam 真实硅谷案例 (7讲)
30 | Apache Beam实战冲刺:Beam如何run everywhere?
31 | WordCount Beam Pipeline实战
32 | Beam Window:打通流处理的任督二脉
33 | 横看成岭侧成峰:再战Streaming WordCount
34 | Amazon热销榜Beam Pipeline实战
35 | Facebook游戏实时流处理Beam Pipeline实战(上)
36 | Facebook游戏实时流处理Beam Pipeline实战(下)
模块六 | 大规模数据处理的挑战与未来 (4讲)
37 | 5G时代,如何处理超大规模物联网数据
38 | 大规模数据处理在深度学习中如何应用?
39 | 从SQL到Streaming SQL:突破静态数据查询的次元
40 | 大规模数据处理未来之路
专栏加餐 | 特别福利 (4讲)
FAQ第一期 | 学习大规模数据处理需要什么基础?
加油站 | Practice makes perfect!
FAQ第二期 | Spark案例实战答疑
FAQ第三期 | Apache Beam基础答疑
结束语 (1讲)
结束语 | 世间所有的相遇,都是久别重逢
大规模数据处理实战
登录|注册

06 | 如何区分批处理还是流处理?

蔡元楠 2019-04-29
你好,我是蔡元楠。
今天,我将会带领你一起学习在进行大规模数据处理时,无论如何也绕不开的两个处理模式:批处理(Batching Processing)和流处理(Streaming Processing)。
在我看来,大规模的视频流系统、大规模物联网(IoT)数据监控系统等各种现代大规模数据系统的出现,已经成为了一种必然的历史潮流。
无论你是在从事哪一种开发方向,都不可避免地要与这些海量数据打交道。如何能既满足实际应用场景的需求,又高效地处理好大规模数据,在整个项目开发架构中都是非常重要的一个环节。
在开始讲解批处理和流处理之前,我想先介绍一下几个必要的背景知识。

无边界数据和有边界数据

这个世界上的数据可以抽象成为两种,分别是无边界数据(Unbounded Data)和有边界数据(Bounded Data)。
顾名思义,无边界数据是一种不断增长,可以说是无限的数据集。
这种类型的数据,我们无法判定它们到底什么时候会停止发送。
例如,从手机或者从传感器发送出来的信号数据,又比如我们所熟知的移动支付领域中的交易数据。因为每时每刻都会有交易产生,所以我们不能判定在某一刻这类数据就会停止发送了。
在国外的一些技术文章上,有时候我们会看到“流数据(Streaming Data)”这一说法,其实它和无边界数据表达的是同一个概念。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《大规模数据处理实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(30)

  • 孙稚昊
    我们的用户画像本质还是批处理,还不能做到实时更新每个人的 profile,但对用户的每次电机有一个实时的劣化推荐版本,就是根据session中点的几个item的click,找到它们的simiiar item,这个是通过cache 和API实现的,并不是实时数据处理

    作者回复: 谢谢你的分享!

    2019-04-29
    8
  • hua168
    老师,上面说流数据是在没到达磁盘之前就处理了,所以速度很快,但是如果那处软件挂了,那部分流数据不是丢失了吗?是不是不能处理重要的数据?
        如果我的数据很重要,但是又想像流那样处理的快速怎办?像redis那样,使用持久化,边处理写延迟写及磁盘这种处理思想吗?还是其它?

    作者回复: 谢谢你的提问!数据如果没有保存到磁盘的话,确实整个软件挂了所有数据就丢失了。不过流处理一样可以处理重要数据的。一般即使数据存在内存中,有的软件会定时将数据的snapshot保存到磁盘中,以防软件全部挂掉。而很多软件都会有data replica,而且会有N+1或者N+2的policy,以此来保证如果有其中一台机器上的软件挂了,另外一台机器可以顶替它。

    一般全部机器都挂的情况非常少见,这就如同存在磁盘上的数据被人运行“rm -fR /”一样,所以在采用流处理的时候不必过于担心。

    2019-04-30
    6
  • xzy
    既有批处理也有流处理,生产环境利用elasticsearch来存储监控数据、日志数据等。为了降低成本和查询速度,会按照小时、天粒度对历史数据做预聚合,这应该属于批处理。其次,es作为搜索引擎,用户也有实时查询的需求,这块应该属于流处理。 谢谢

    作者回复: 谢谢你的分享!

    2019-04-30
    5
  • mini希
    数仓有没有准实时的解决方案呢?
    2019-04-29
    5
  • yangs
    老师您好,之前看到网上说flink实现的流处理和spark streaming不一样,是因为spark使用了微批处理模拟流处理,可是我觉得flink实现的原理也像是用批处理模拟流处理,将一段一段数据包裹在时间窗口里来实现,这个时间窗口的数据处理,可不可以也理解成为是批处理?

    作者回复: 可以

    2019-04-29
    4
  • 邱从贤※klion26
    有限流是无限流的一个特例,所以一直在想是不是未来不再需要批处理,所有的都可以流处理,从而达到真正的流批一体。

    从现在的情况看,批处理主要用于分析,用 sql 较多,且会对多个表进行处理,是不是意味着流上的 sql 也是刚需。

    线下批处理能够不停重算的特性,应该可以让流处理不停做 checkpoint 来支持,这样是不是就和 db 的 backup 就有点像了,那是不是最后流处理,批处理,数据库也会统一起来呢?

    作者回复: 谢谢你的留言!我很认同你的观点,关于流处理和批处理未来应该会统一起来。数据库作为存储系统的话还是会单独存在的吧。

    2019-04-29
    3
  • JohnT3e
    一般业务中都会涉及到实时处理和批处理的需求,现在采取的类似于Kappa的架构。

    Kappa Architecture: http://milinda.pathirage.org/kappa-architecture.com/
    Samba Architecture: http://lambda-architecture.net/
    2019-04-29
    2
  • 在实际工作中数据仓库的数据处理使用的是批处理,根据需要大多数据是日处理,个别数据是一天处理几次,但都是批处理。在做核心业务系统时使用的是流数据处理,通常用消息中间件来传递事件,接收到事件时即开始处理。一直想尝试的是通过日志信息抽取业务信息,实现对业务信息的实时分析,例如当日的实时交易笔数,交易额等,无需侵入核心业务系统,通过日志即可以流数据的形式实时传递给数据平台。了解过splunk,elasticsearch都可以做,但是不清楚哪个更好,或者有其他更好的选择。

    作者回复: 谢谢你的经验分享!赞一个!

    2019-04-29
    2
  • 小凡
    请问spring-batch和hadoop这类批处理框架有什么不同吗?还有spring data flow
    2019-05-18
    1
  • slowforce
    我们接收现场设备发回来的数据,数据以email或者sftp的形式上传 或者以自定义的格式通过socket直接传。对于前一种情况,我们采取批处理的方式 定时去处理,而对于第二种情况 我认为就是流处理

    作者回复: 谢谢你的分享!

    2019-05-09
    1
  • 越甲非甲
    目前我们做的流处理场景下的解决方案,都是控制较小时间窗口的批处理,通过累加类似的方案来实现近似流处理的效果。请问老师,流处理的更一般性的解决思路是什么样子的呢?是这种微批处理的路子吗?谢谢老师!
    2019-05-07
    1
  • CoderLean
    Flink的本质就是流处理,而里面的批处理api底层是将时间或者个数设定在某个区域里面,可以认为在这个架构中批处理是流处理的一个特例,我看有的评论说反了。说明还没好好掌握flink

    作者回复: 赞一个大牛的留言啊!

    2019-05-04
    1
  • 每天晒白牙
    产生特定格式和维度的报表数据一般是批处理,但实时报表是流处理,需要低延迟

    作者回复: 谢谢你的分享!

    2019-04-29
    1
  • 李鹏
    实时处理我的理解是session保持,而不是仅仅因为毫秒就是实时处理。例如,voip
    2019-09-11
  • 王蒙
    我个人也是比较赞同 DataFlow 模型的思想的,认为批是流的一个特例,未来的计算不会再明显区分到底是流还是批,但不能排除除一些特殊情况(毕竟当前的批计算引擎针对批的场景做了大量的优化,通用系统的性能肯定是赶不上专用系统的),但计算不仅仅是批和流两种形态,还有复杂计算场景,比如现在的 TensorFlow(AI 框架的本质也是计算)、RAY 等,计算引擎最后会不会完全融合到一起呢?或者换个思路,一个引擎可以兼容所有的引擎(有点类似 Beam),在一个计算框架里,可以跑多个 runner(这个 runner 可以是不同的引擎),未来会不会是这样的呢?
    2019-07-09
  • 风中花
    看到老师有设专栏讲fink的想法!有点期待哦
    2019-06-25
  • Echo💯
    由spark中的流式表处理 structured-streaming来说,就是针对批处理来对数据进行一段时间一批一批的处理,但是structured-streaming里针对的是连接kafka中的数据,是针对事件时间来处理的,而不是处理时间,所以就是structured-streaming是针对事件时间的批处理计算,谢谢。

    作者回复: 谢谢你的分享!

    2019-06-21
  • 西北偏北
    有界数据是无界数据的一个子集

    对实时性要求很高的无界数据处理,需要使用流失处理技术

    对数据进行挖掘深沉挖掘的数据处理,需要使用批处理技术,其时延相对较高
    2019-06-14
  • 天下行走
    很棒,项目中流批处理都用到了,不过没有用成熟的组件,是自己项目写的处理框架,根据lamda架构思想来实现的;
    当数据是永无止境的事件流时,使用流处理,记下了

    作者回复: 谢谢你的分享!我觉得你能自己写出一个处理架构出来也是很牛的,继续加油!

    2019-06-04
  • Zoe
    老师,突然想到一个小问题。比如说我有一个系统会源源不断的产生log,我把log按小时写进不同文件里。这个过程我可以理解为是流处理,对吗?但当我需要再对log进行其他分析时,我很有可能需要读取不同时间的log文件,再进行一个可能好几个小时的处理,这个过程就可以视为批处理?虽然数据有可能也是以数据流的形式从文件中读取进来的?
    2019-05-29
收起评论
30
返回
顶部