从0开始学大数据
李智慧
同程艺龙交通首席架构师,前Intel大数据架构师,《大型网站技术架构》作者
立即订阅
14333 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么说每个软件工程师都应该懂大数据技术?
免费
预习模块 (3讲)
预习 01 | 大数据技术发展史:大数据的前世今生
预习 02 | 大数据应用发展史:从搜索引擎到人工智能
预习 03 | 大数据应用领域:数据驱动一切
模块一 Hadoop大数据原理与架构 (7讲)
04 | 移动计算比移动数据更划算
05 | 从RAID看垂直伸缩到水平伸缩的演化
06 | 新技术层出不穷,HDFS依然是存储的王者
07 | 为什么说MapReduce既是编程模型又是计算框架?
08 | MapReduce如何让数据完成一次旅行?
09 | 为什么我们管Yarn叫作资源调度框架?
10 | 模块答疑:我们能从Hadoop学到什么?
模块二 大数据生态体系主要产品原理与架构 (7讲)
11 | Hive是如何让MapReduce实现SQL操作的?
12 | 我们并没有觉得MapReduce速度慢,直到Spark出现
13 | 同样的本质,为何Spark可以更高效?
14 | BigTable的开源实现:HBase
15 | 流式计算的代表:Storm、Flink、Spark Streaming
16 | ZooKeeper是如何保证数据一致性的?
17 | 模块答疑:这么多技术,到底都能用在什么场景里?
模块三 大数据开发实践 (8讲)
18 | 如何自己开发一个大数据SQL引擎?
19 | Spark的性能优化案例分析(上)
20 | Spark的性能优化案例分析(下)
21 | 从阿里内部产品看海量数据处理系统的设计(上):Doris的立项
22 | 从阿里内部产品看海量数据处理系统的设计(下):架构与创新
23 | 大数据基准测试可以带来什么好处?
24 | 从大数据性能测试工具Dew看如何快速开发大数据系统
25 | 模块答疑:我能从大厂的大数据开发实践中学到什么?
模块四 大数据平台与系统集成 (6讲)
26 | 互联网产品 + 大数据产品 = 大数据平台
27 | 大数据从哪里来?
28 | 知名大厂如何搭建大数据平台?
29 | 盘点可供中小企业参考的商业大数据平台
30 | 当大数据遇上物联网
31 | 模块答疑:为什么大数据平台至关重要?
模块五 大数据分析与运营 (5讲)
32 | 互联网运营数据指标与可视化监控
33 | 一个电商网站订单下降的数据分析案例
34 | A/B测试与灰度发布必知必会
35 | 如何利用大数据成为“增长黑客”?
36 | 模块答疑:为什么说数据驱动运营?
模块六 大数据算法 (6讲)
37 | 如何对数据进行分类和预测?
38 | 如何发掘数据之间的关系?
39 | 如何预测用户的喜好?
40 | 机器学习的数学原理是什么?
41 | 从感知机到神经网络算法
42 | 模块答疑:软件工程师如何进入人工智能领域?
智慧写给你的寄语 (1讲)
所有的不确定都是机会——智慧写给你的新年寄语
结束语 (2讲)
结束语 | 未来的你,有无限可能
第2季回归丨大数据之后,让我们回归后端
从0开始学大数据
登录|注册

15 | 流式计算的代表:Storm、Flink、Spark Streaming

李智慧 2018-12-01
我前面介绍的大数据技术主要是处理、计算存储介质上的大规模数据,这类计算也叫大数据批处理计算。顾名思义,数据是以批为单位进行计算,比如一天的访问日志、历史上所有的订单数据等。这些数据通常通过 HDFS 存储在磁盘上,使用 MapReduce 或者 Spark 这样的批处理大数据计算框架进行计算,一般完成一次计算需要花费几分钟到几小时的时间。
此外,还有一种大数据技术,针对实时产生的大规模数据进行即时计算处理,我们比较熟悉的有摄像头采集的实时视频数据、淘宝实时产生的订单数据等。像上海这样的一线城市,公共场所的摄像头规模在数百万级,即使只有重要场所的视频数据需要即时处理,可能也会涉及几十万个摄像头,如果想实时发现视频中出现的通缉犯或者违章车辆,就需要对这些摄像头产生的数据进行实时处理。实时处理最大的不同就是这类数据跟存储在 HDFS 上的数据不同,是实时传输过来的,或者形象地说是流过来的,所以针对这类大数据的实时处理系统也叫大数据流计算系统。
目前业内比较知名的大数据流计算框架有 Storm、Spark Streaming、Flink,接下来,我们逐一看看它们的架构原理与使用方法。

Storm

其实大数据实时处理的需求早已有之,最早的时候,我们用消息队列实现大数据实时处理,如果处理起来比较复杂,那么就需要很多个消息队列,将实现不同业务逻辑的生产者和消费者串起来。这个处理过程类似下面图里的样子。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《从0开始学大数据》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(23)

  • 李鼎(哲良) 置顶
    数据流是久经考验的典型思路,在网络协议(如TCP)、数据平台这样场景,早就应用多年习以为常了。淘宝业务的应用架构升级可以认为是把这样思路应用到了业务系统开发中,把『流』作为业务表达上的一等概念和手段,并在业务架构/系统能力优化提升。

    简单地说,因为业务面向数据流来编写,一方面业务逻辑表达可以自然接近业务流程;另一方面逻辑运行可以是全异步有很好的性能提升,一核心后端应用在双11线上,单机QPS提升30%,RT下降40%。流程的表达与异步/同步执行方式是分离的(如果了解过像RxJava,这句会容易理解:)。

    另外,『流』也为业务系统的保护提供新的一些方法,在思路上其实和流计算平台是一样的,这对业务大型系统的稳定性来非常重要。

    当然,业务的流式架构,在业务编写上有些FP风格(简单地说比如充分使用了Lambda),平时我们大家业务上主要是用命令式顺序平铺方式来表达,会有要个熟悉过程,虽然不见得有多难 :)

    作者回复: 👍🏻 欢迎有兴趣的同学进一步探讨。

    李鼎的流式架构文档地址:https://github.com/oldratlee/rp-pratice

    2018-12-06
    2
    94
  • 万~~
    你好 storm spark flink 都是优秀的框架 那我们应该学习哪个呢? 都学肯定精力不够 而且难以精通
    2018-12-01
    15
  • laurencezl
    智慧老师你好,这节对storm.spark.flink的介绍感觉过于概述了!后面是否会有详细的文章介绍,比如分析对比一下他们三者各自优缺点在哪里?各自试用与不适用的业务场景有哪些之类的呢?
    2018-12-04
    2
    8
  • 纯洁的憎恶
    批计算是对历史数据的一次性处理,流计算是对实时流入的数据实时响应。

    storm模仿消息队列(什么是消息队列?卡夫卡?),把消息队列中与业务逻辑无关的过程部分抽象出来形成标准框架,实现复用。开发者不用纠结四面八方涌入的实时数据如何流转,消息如何处理和消费,只用考虑业务流程、数据源、处理逻辑。

    spark streaming以spark为基础,将同一时间段的数据分片聚合在一起做为一批数据处理(以批模拟流)。

    flink则是以流模拟批,它的底层计算逻辑只有流,通过时间窗口把流入数据按时间间隔分为若干批(与spark streaming类似),通过数据源的不同,完成在流与批的切换。

    计算机软件的发展史就是一部业务与技术分离的历史,通过把业务不相关部分高度抽象并标准化,开发者能够越来越多的专注于业务流程,而越来越少的考虑机器、程序等技术细节的因素。

    不知这么理解对不对。

    需要进一步明确的知识点:消息队列。
    2018-12-01
    5
  • Jowin
    智慧老师,我是从事金融实时数据处理的,有一类典型需求是从原始实时数据计算出各种衍生数据,但是有状态积累。比如,当前状态是S0,收到数据A0,此时要根据(S0,A0)生成数据A1,同时要更新当前状态S1,后续的新数据再基于S1处理。团队考虑过使用Stream作为计算平台,有两个问题没想清楚怎么处理:
    1)如果计算任务故障挂掉,会不会导致这期间的数据丢失?
    2)另外,由于数据量也不小,差不多在每秒4~5万条消息,状态S的更新特别频繁,常规的存储在性能上没有办法满足,所以我们是采用内存+日志文件保存。如果重启的任务被分配套新的服务节点上,我们是否就还得考虑这部分数据也要迁移过去?
    盼复,谢谢。

    作者回复: 1 spark streaming有容错机制,不会丢失。当然,服务器数量要充足。

    2 试下Redis存储状态。

    2018-12-01
    5
  • 常平
    流式架构本质上是事件驱动(event-Driven)架构,流由段(segment)组成,段由事件(event)组成,事件由字节(bytes)组成,事件大小有限,而字节流大小无限
    2018-12-11
    3
  • 杰之7
    通过本小节的学习,了解了常用的流计算及它们的计算框架,其中Spark Streaming巧妙了运用Spark计算速度的优势,将Spark批计算通过时间间隔装置成流计算。在我们的生活中,股票交易的价格传输应该就是运用了流计算,要求在极短的时间内完成对价格的改变。当然,淘宝,一线城市的摄像头在后台处理上也应用了流计算技术。相比批计算技术,流计算在重要的数据上会用的越来越广。
    2018-12-01
    3
  • 尼糯米
    问题一
    Strom算是比较早期的大数据流计算框架
    》》定义处理流程
    》》流程的每个环节上的处理逻辑
    数据流转是计算框架按处理流程进行流转吗?
    从作者的陈述,实在看不出这和实时数据有啥关系,把它的计算框架套在批数据上也不伪和,
    至少文中不指明是为了流计算,实在看不出来

    问题二
    Spark Streaming实现的流计算
    是通过把流数据切分迷你批数据且每个迷你批数据的处理非常迅速,
    而这个迷你批数据是怎么做容错呢,切分出来的数据总要做容错吧

    问题三
    Flink不管是批数据还是实时数据流,对它只是数据源不同,这点从源码上切实看出来了,
    它确实要构建一个数据源出来,在数据源上做各种数据处理。
    但是我从作者描述中理解到的东西:数据处理终究还是避免不了对数据的分段,
    所以,不管是怎样的流计算框架,把数据处理总是以数据分片的基础上进行呢

    如果是这样,流计算喊出来还是响当当,蛮吓人的
    希望看到的各位老师批评下

    PS,该篇小结太多了,小结之上倒是不多
    2019-01-10
    2
  • 星极
    文中有这么一段话:“回到流计算,固然我们可以用各种分布式技术实现大规模数据的实时流处理,但是我们更希望只针对小数据量进行业务开发,然后丢到一个大规模服务器集群上,就可以对大规模实时数据进行流计算处理。”,在下愚昧,没有get到,不用分布式技术实现大规模数据实时流处理的真正原因是?

    作者回复: 我这里可能没表达清楚,这里是说不用传统的互联网分布式技术架构,就是负载均衡、微服务调用各种技术方案进行流计算,虽然这些技术也能解决流计算的需求场景。

    主要是因为,前述这些互联网分布式技术架构都是定制式的,每个流计算场景都需要进行特定的技术开发。而大数据流计算平台则是提供一个统一的计算平台,以及相关的编程框架,只需要按照这个框架开发流计算程序提交到大数据流计算平台执行,不需要关注数据如何流转、集群如何扩展,就可以完全搞定大数据流计算。

    2019-10-06
    1
  • 。。。。
    完全没有看出来flink在流处理的流程上和spark streaming有啥区别,老师后面的文章有没详细解读呢
    2019-06-04
    1
  • zhj
    1面向数据流的编程在java里逐渐展露头角,之前rxjava更多的是用于android,直到hystrix才算是后端一个大规模应用的案例(也和场景有关吧,后端的大多业务都是短事物处理去构建一条数据流水线反倒显得累赘),reactor是响应式编程的另一个实现,直到spring5全面拥抱以后,才完全进入人们视野(所以技术落地离不开大厂的支持),单纯的业务层处理构造一条很短的数据流意义不大(因为数据源可能还是需要返回所有数据),spring webflux结合springdata从持久层到业务层构建了自下而上的数据流(前提是持久层驱动是非阻塞的),并利用reactor-netty(支持网络背压),理想情况下将构建一个全链路的按需处理数据流
    2 数据流编程,有点类似当年面向函数->面向对象,更多的是思考方式的改变,异步和数据流都是为了正确的构建数据流间的关系而存在,不过目前貌似不支持对数据流分片并行处理

    作者回复: 👍🏻

    2019-01-08
    1
  • 🐱您的好友William🐱
    主攻人工智能,机器学习和算法实现的应该学习哪种呢?Storm,Spark还是Flink呢?

    作者回复: spark

    2018-12-04
    1
  • 三木子
    和老师探讨一个问题,对于架构设计,目前流行的是微服务,我个人觉得微服务还是有好些缺点。架构从开始的合走到现在的分,未来会不会从分又到和呢?

    作者回复: 不会

    2018-12-01
    1
  • qiaoer
    老师讲了Storm,Flink,Spark Streaming,感觉他们几个很相似,都是Master/slave 结构,一个Master节点进行 任务划分管理,然后下发到Slave节点,Slave负责具体的执行。 但是他们的区别是什么?还有Flink和Spark Streaming他们都是Micro Streaming的思路?那么适用的场景又是什么呢?
    2019-10-30
  • godtrue
    纵观计算机软件发展史,发现这部历史堪称一部技术和业务不断分离的历史。人们不断将业务逻辑从技术实现上分离出来,各种技术和架构方案的出现,也基本都是为这一目标服务——这个很认同,所有工具的发展,人类都会趋于这种改进方式来处理。

    流式计算,特点是否就是对实时数据的计算,数据像流水一样无穷无尽?
    2019-09-28
  • 不贰者
    老师说flink也是将实时的数据流分成一小段一小段处理,这样的话和spark streaming本质上没有区别了?
    2019-06-19
  • maomaostyle
    想了解storm与flink以及spark streaming 相比有什么区别?感觉后两者都是将数据源做很细粒度的切分,最终看上去“像”是连续的流,那么storm的处理方式呢?
    2019-02-20
  • 香港记者
    2018-12-25
  • 洪喜
    感谢老师的讲解,不过也印证了师傅领进门修行在个人这句话,个人需要针对没深入讲解的知识点再次深入自学了。
    2018-12-17
  • 修行者
    想要了解这三种流式计算框架 Strom、Flink、Spark Streaming,各种的优缺点及适用的业务场景,智慧哥在下面的专栏会详细介绍吗 ?
    2018-12-07
收起评论
23
返回
顶部