Structured Streaming简介

Structured Streaming 简介

Spark Streaming vs. Structured Streaming

Spark Streaming

Spark Streaming是spark最初的流处理框架,使用了微批的形式来进行流处理。

提供了基于RDDs的Dstream API,每个时间间隔内的数据为一个RDD,源源不断对RDD进行处理来实现流计算

Structured Streaming

Spark 2.X出来的流框架,采用了无界表的概念,流数据相当于往一个表上不断追加行。

基于Spark SQL引擎实现,可以使用大多数Spark SQL的function

计算模型

在这里插入图片描述

Trigger 机制:决定引擎在什么时候、以怎样的方式和频率去处理接收到的数 据流。Structured Streaming 支持 4 种 Trigger

在这里插入图片描述

Structured Streaming 支持两种计算 模型,分别是 Batch mode 和 Continuous mode。计算模型本质上,它要解决的问题是 Spark 以怎样的方式,来对待并处理流数据。

Batch mode

Batch mode,指的是 Spark 将连续的数据流切割为微批(Micro-batch)数据,也即小份的数据集。

每一份 Micro-batch,都会触发一个 Spark Job,每一个 Job 会包含若干个Tasks。这些 Tasks 最终会交由 Spark SQL 与 Spark Core 去做优化与执行。

在这里插入图片描述

Continuous mode

Continuous mode 并不切割数据流,而是以事件 / 消息(Event / Message)为粒度,用连续的方式来处理数据。这里的事件或是消息,指代的是原始数据流中最细粒度的数据形式,它可以是一个单词、一行文本,或是一个画面帧。

在 Continuous mode 下,Structured Streaming 使用一个常驻作业(Long running job)来处理数据流(或者说服务)中的每一条消息。

在这里插入图片描述

**Batch mode 吞吐量大、延迟高(秒级),而 Continuous mode 吞吐量低、延迟更低(毫秒级)。**吞吐量指的是单位时间引擎处理的消息数量,批量数据能够更好地利用 Spark 分布式计算引擎的优势,因此 Batch mode 在吞吐量自然更胜一筹。

容错机制

容错指的是,在计算 过程中出现错误(作业层面、或是任务层面,等等)的时候,流处理引擎有能力恢复被中断的计算过程,同时保证数据上的不重不漏,也即保证数据处理的一致性。

从数据一致性的角度出发,这种容错的能力,可以划分为 3 种水平:

  • At most once:最多交付一次,数据存在丢失的风险;

  • At least once:最少交付一次,数据存在重复的可能;

  • Exactly once:交付且仅交付一次,数据不重不漏。

这里的交付,指的是数据从 Source 到 Sink 的整个过程。

Structured Streaming 的容错能力是:“结合幂等的 Sink,Structured Streaming 能够提供 Exactly once 的容错能力”。

  • 在数据处理上,结合容错机制,Structured Streaming 能够提供“At least once”的处理能力

  • 结合幂等的 Sink,Structured Streaming 可以实现端到端的“Exactly once”容错水平。

Batch mode 容错

在 Batch mode 下,Structured Streaming 利用 Checkpoint 机制来实现容错。在实际处理数据流中的 Micro-batch 之前,Checkpoint 机制会把该 Micro-batch 的元信息全部存储到开发者指定的文件系统路径,比如 HDFS 。当出现作业或是任务失败时,引擎只需要读取这些事先记录好的元信息,就可以恢复数据流的“断点续传”。

每一个 Micro-batch 在被 Structured Streaming 引擎实际处理之前, Checkpoint 机制会先把它的元信息记录到Write Ahead Log(WAL 日志)。Batch mode先写日志,再处理数据

每个 Micro-batch 都会触发一个 Spark 作业,作业与任务的频繁调度会引入计算开销,在运行模式与容错机制的双重延迟下,导致Batch mode延迟较高。

Continuous mode 容错

因为 Continuous mode 没有微批,不会涉及到微批中的延迟,到达 Source 中 的消息可以立即被 Structured Streaming 引擎消费并处理。但这同时也带来一个问题,那就是引擎如何把当前的处理进度做持久化,从而为失败重试提供可能。

在 Continuous mode 下,Structured Streaming 利用 Epoch Marker 机制,来实现容错。

对于 Source 中的数据流,Structured Streaming 每隔一定时间(可设置), 安插一个 Epoch Marker,而两个 Epoch Marker 之间的数据称为一个 Epoch。

在引擎处理并交付数据的过程中,每当遇到 Epoch Marker 的时候,引擎都会把对应 Epoch 中最后一条消息的 Offset 写入日志,从而实现容错。日志的写入是异步的,因此这个过程不会对数据的处理造成延迟。

Continuous mode先处理数据,然后再写日志

Watermark 机制

Watermark 机制是用来决定,哪些 Late data 可以参与过往窗口状态的更新,而哪些 Late data 则惨遭抛弃。

水印与水位线,对标的都是消息的事件时间。

水印相当于系统当前接收到的所有消息中最大的事件时间

水位线指的是水印对应的事件时间,减去用户设置的容忍值(记作 T )。

水位线对应的事件时间,称作 Watermark。

Watermark = max event time - T

在这里插入图片描述

当有新消息到达系统后,Structured Streaming 首先判断它的事件时间,是否大于水印。

  • 如果事件时间大于水印的话,Watermark 机制则相应地更新水印与水位线,即最大事件时间与 Watermark。

  • 假设新到消息的事件时间小于当前水印(当前最大事件时间),那么系统进一步判断消息的事件时间 与“Watermark 时间窗口下沿”的关系。所谓“Watermark 时间窗口下沿”,它指的是 Watermark 所属时间窗口的起始时间。

    • 新到消息的事件时间大于“Watermark 时间窗口下沿”,则消息可以参 与过往窗口的状态更新;
    • 否则,消息将被系统抛弃,不再参与计算。

    Watermark 时间窗口下沿说明

    假设 Watermark 为“2021-10-01 09:34:00”,且事件时间窗口大小为 5 分钟,那么,Watermark 所在时间窗口就是[“2021-10-01 09:30:00”,“2021-10- 01 09:35:00”],也即窗口 30-35。这个时候,“Watermark 时间窗口下沿”,就是窗口 30-35 的起始时间,也就是“2021-10-01 09:30:00”,如下图所示。
    在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Structured Streaming 是 Apache Spark 的一种流式处理引擎,它可以帮助我们对流式数据进行转换、处理和聚合。Structured Streaming 使用了基于 SQL 的语法,因此我们可以使用熟悉的 SQL 语句来对流式数据进行操作。例如,我们可以使用以下 SQL 语句对流式数据进行过滤: ``` SELECT * FROM stream WHERE value > 5 ``` 或者使用以下 SQL 语句对流式数据进行分组并计算每组的平均值: ``` SELECT key, AVG(value) FROM stream GROUP BY key ``` Structured Streaming 还支持联机处理,即可以对流式数据进行实时处理,并将结果实时输出。这使得我们可以使用 Structured Streaming 实现各种实时数据处理任务,如实时统计、实时分析等。 ### 回答2: 结构化流式处理(Structured Streaming)是一种用于处理实时数据的数据处理引擎。它允许开发人员使用SQL查询实时流数据,无需编写复杂的流式处理程序。Structured Streaming SQL是一种使用SQL语句对实时数据进行查询和操作的方式。 Structured Streaming SQL可以通过Spark SQL的语法和功能来处理实时数据。它可以将实时数据以表的形式表示,并且支持标准SQL查询操作,例如选择、过滤、聚合和连接操作。在Structured Streaming SQL中,开发人员可以使用常见的SQL函数和操作符来处理实时数据。 Structured Streaming SQL还支持时间窗口操作,可以通过指定窗口长度和滑动步长来对实时数据进行分组和聚合。此外,Structured Streaming SQL还支持流-静态表连接,可以将实时流数据与静态数据表进行关联操作,以便获得更丰富的分析结果。 Structured Streaming SQL的一个主要特点是其容错性和弹性。当发生故障或数据丢失时,Structured Streaming可以自动从上次检查点恢复,并且能够动态调整计算资源以适应数据的变化。 总而言之,Structured Streaming SQL提供了一种简单、灵活且易于使用的方式来处理和分析实时数据。通过使用SQL语句,开发人员可以更快地构建和迭代实时数据处理应用程序,从而更好地理解和利用实时数据的价值。 ### 回答3: Structured StreamingSpark提供的一种流处理方式,可以使用SQL语句来对流式数据进行处理和分析。它使用了DataFrame和Dataset这两种抽象概念,提供了与传统批处理相似的编程模型,可以方便地进行流处理任务。 与传统的流处理方式相比,Structured Streaming具有以下特点: 1. 连接机制:Structured Streaming可以连接各种输入源和输出目标,如Kafka、消息队列等,方便处理不同来源和去向的数据。 2. 强大的API支持:Structured Streaming提供了丰富的API,可以通过SQL语句或DataFrame/Dataset API来执行流处理任务,使得开发人员可以使用熟悉的SQL语言进行流处理操作。 3. 实时处理:Structured Streaming支持实时处理,可以以毫秒级的延迟来处理数据,使得我们能够实时处理数据流并及时生成结果。 4. 容错性:Structured Streaming具有高度的容错性,能够自动处理失败和恢复。它使用了Spark的弹性分布式数据集(RDD)来进行数据处理,一旦发生故障,它可以自动从上一次处理的结果继续进行处理。 5. 一致性:Structured Streaming保证了事件的顺序和一致性,保证数据的完整性和正确性。 6. 扩展性:Structured Streaming具有良好的扩展性,可以根据实际需求进行水平扩展,以满足大规模数据处理的需求。 结构化流处理SQL的使用可以极大地简化流处理任务的编写和维护,使得开发人员能够更加专注于业务逻辑的实现。通过使用结构化流处理SQL,我们可以方便地进行各种流处理操作,包括过滤、转换、聚合以及窗口操作等,同时可以借助Spark的优化能力来提高处理性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值