Structured Streaming 和 Spark streaming的区别

 

我先简单的说一下Spark streaming,然后在想对比的说一下Structured Streaming 

Spark streaming的概述

  • Spark Streaming是一个基于Spark Core之上的实时计算框架,可以从很多数据源消费数据并对数据进行实时的处理
  • Spark Streaming类似于Apache Storm,用于流式数据的处理。
  • 根据其官方文档介绍,Spark Streaming有高吞吐量和容错能力强等特点。
  • Spark Streaming支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等等。
  • 数据输入后可以用Spark的高度抽象操作如:map、reduce、join、window等进行运算。而结果也能保存在很多地方,如HDFS,数据库等。
  • 另外Spark Streaming也能和MLlib(机器学习)以及Graphx完美融合。

Spark streaming的原理

  • 一个应用Application由一个任务控制节点Driver和若干个作业Job构成,一个作业由多个阶段Stage构成,一个阶段由多个任务Task组成TaskSet
  • 当执行一个应用时,任务控制节点会向集群管理器ClusterManager申请资源,启动Executor,并向Executor发送应用程序代码和文件,然后在Executor上执行task。
  • Spark Streaming 是基于spark的流式批处理引擎,其基本原理是把输入数据以某一时间间隔批量的处理(微批次),当批处理间隔缩短到秒级时,便可以用于处理实时数据流。其实就是把流式计算当作一系列连续的小规模批处理来对待!其实就是用批处理(小批次)的思想来做流处理
  • 通过上面的学习我们知道了Spark Streaming是将流式计算分解成一系列短小的批处理作业。这里的批处理引擎是还是SparkCore

Spark streaming中的数据抽象

什么是DStream

DStream(Discretized Stream,离散化数据流,连续不断的数据流)是Spark Streaming的基础抽象,代表持续性的数据流和经过各种Spark算子操作后的结果数据流

1.DStream本质上就是一系列时间上连续的RDD

​​​​​​​​​​​​​​Structured Streaming曲折发展史

在2.0之前,Spark Streaming作为核心API的扩展,针对实时数据流,提供了一套可扩展、高吞吐、可容错的流式计算模型。
Spark Streaming会接收实时数据源的数据,并切分成很多小的batches,然后被Spark Engine执行,产出同样由很多小的batchs组成的结果流。
本质上,这是一种micro-batch(微批处理)的方式处理,这种设计让Spark Streaming面对复杂的流式处理场景时捉襟见肘。

其实在流计算发展的初期,市面上主流的计算引擎本质上都只能处理特定的场景:

storm作为起步非常早的流计算引擎,大部分用于one-by-one式无状态的数据处理场景(虽然提供了Trident API用于有状态的聚合计算,但依然有局限),

而spark streaming这种构建在微批处理上的流计算引擎,比较突出的问题就是处理延时较高(无法优化到秒以下的数量级),以及无法支持基于event_time的时间窗口做聚合逻辑。

在这段时间,流式计算一直没有一套标准化、能应对各种场景的模型,直到2015年google发表了The Dataflow Model的论文。

​​​​​​​​​​​​​​Dataflow模型

在日常商业运营中,无边界、乱序、大规模数据集越来越普遍(例如,网站日志,手机应用统计,传感器网络)。同时,对这些数据的消费需求也越来越复杂,比如说按事件发生时间序列处理数据,按数据本身的特征进行窗口计算等等。同时人们也越来越苛求立刻得到数据分析结果。
    作为数据工作者,不能把无边界数据集(数据流)切分成有边界的数据,等待一个批次完整后处理。

相反地,应该假设永远无法知道数据流是否终结,何时数据会变完整。唯一确信的是,新的数据会源源不断而来,老的数据可能会被撤销或更新。

由此,google工程师们提出了Dataflow模型,从根本上对从前的数据处理方法进行改进。

Dataflow模型的核心思想

对无边界,无序的数据源,允许按数据本身的特征进行窗口计算,得到基于事件发生时间的有序结果,并能在准确性、延迟程度和处理成本之间调整。

论文中构建模型的四个维度

抽象出四个相关的维度,通过灵活地组合来构建数据处理管道,以应对数据处理过程中的各种复杂的场景

  • what   需要计算什么
  • where  需要基于什么时间(事件发生时间)窗口做计算
  • when   在什么时间(系统处理时间)真正地触发计算
  • how    如何修正之前的计算结果

论文的大部分内容都是在说明如何通过这四个维度来应对各种数据处理场景。

猜你喜欢

转载自blog.csdn.net/qq_38483094/article/details/100674234