《Spark Streaming实时流式大数据处理实战》 ——1.2 流式处理与Spark Streaming

举报
华章计算机 发表于 2020/02/22 13:26:08 2020/02/22
【摘要】 本节书摘来自华章计算机《Spark Streaming实时流式大数据处理实战》 —— 书中第1章,第1.2.1节,作者是肖力涛 。

1.2  流式处理与Spark Streaming

  在很多实时数据处理的场景中,都需要用到流式处理框架,Spark也包含了一个完整的流式处理框架Spark Streaming。本节我们先阐述流式处理框架,之后介绍Spark Streaming。

1.2.1  流式处理框架

  在传统的数据处理过程中,我们往往先将数据存入数据库中,当需要的时候再去数据库中进行检索查询,将处理的结果返回给请求的用户;另外,MapReduce这类大数据处理框架,更多应用在离线计算场景中。而对于一些实时性要求较高的场景,我们期望延迟在秒甚至毫秒级别,就需要引出一种新的数据计算结构——流式计算,对无边界的数据进行连续不断的处理、聚合和分析。

  流式处理任务是大数据处理中很重要的一个分支,关于流式计算的框架也有很多,如比较出名的Storm流式处理框架,是由Nathan Marz等人于2010年最先开发,之后将Storm开源,成为Apache的顶级项目,Trident对Storm进行了一个更高层次的抽象;另外由LinkedIn贡献给社区的Samza也是一种流处理解决方案,不过其构建严重依赖于另一个开源项目Kafka。

  Spark Streaming构建在Spark的基础之上,随着Spark的发展,Spark Streaming也受到了越来越多的关注。

  不同的流式处理框架有不同的特点,也适应不同的场景。

  1.处理模式

  对于流式处理框架而言,有两种完全不同的处理模式。一种是原生流处理(Native)的方式,即所有输入记录会一条接一条地被处理,上面我们提到的Storm和Samza都是采用这种方式。

  另外一种是微批处理(Batch)的方式,将输入的数据以某一时间间隔T,切分成多个微批量数据,然后对每个批量数据进行处理,Spark Streaming和Trident采用的是这种方式。两种处理模式的区别,如图1.5所示。

 image.png

图1.5  流式处理框架的不同处理模式

  2.消息传输保障

  一般有3种消息传输保障,分别是At most once、At least once和Exactly once。At most once表示每条消息传输的次数为0次或者1次,即消息可能会丢失;At least once表示每条消息传输的次数大于等于1次,即消息传输可能重复传输但保证不会丢失;Exactly once表示每条消息只会精确地传递1次,即消息传输过程中既不会丢失,也不会重复。Storm和Samza保证了At least once,而Spark Streaming和Trident保证了Exactly once。

  3.容错机制

  在企业的日常生产环境中,流式处理发生中断出错的现象是常有的情况,可能是发生在网络部分、某个节点宕机或程序异常等。

  因此流式处理框架应该具备容错能力,当发生错误导致任务中断后,应该能够恢复到之前成功的状态重新消费。Storm和Trident是利用记录确认机制(Record ACKs)来提供容错功能,Samza采用了基于日志的容错方式,而Spark Streaming则采用了基于RDD Checkpoint的方式进行容错。

  4.性能

  流式处理框架自然要关注一些性能指标,从而了解不同框架的特点,包括延迟时间(Latency)和吞吐量(Throughput)等指标。Storm和Samza采用了逐条处理记录的方式,其延迟时间很低,其中Storm在实时性方面表现更加优异;而Spark Streaming和Trident采用了微批处理的方式,所以其延迟时间较高。另一方面,在吞吐量上,Spark Streaming和Samza的表现要优于Storm和Trident。

  通过流式处理框架的介绍,以及和不同流式处理框架的比较,我们了解了Spark Streaming作为新兴的流式处理框架的特点,下面对Spark Streaming做一些更加详细的介绍。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。