文章目录

  • Structured Streaming 简介
    • Spark Streaming vs. Structured Streaming
    • 计算模型
      • Batch mode
      • Continuous mode
    • 容错机制
      • Batch mode 容错
      • Continuous mode 容错
    • Watermark 机制

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”,如下图所示。

Structured Streaming简介相关推荐

  1. Structured Streaming 案例初体验

    Structured Streaming程序基本步骤 编写Structured Streaming程序的基本步骤是: 1.创建SparkSession实例: 2.创建DataFrame表示从数据源输入 ...

  2. kafka spark Structured streaming整合后集群报错KafkaConsumer.subscribe(Ljava/util/Collection;)V

    简介 整个项目架构是在CDH中,,然后spark Structured streaming消费kafka. spark 2.3版本 kafka0.10版本 <!-- spark sql kafk ...

  3. Structured Streaming系列-1、Structured Streaming

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 传送门:大数据系列文章目录 官方网址:http://spark.apache.org/. ht ...

  4. 一篇吃饱 Structured Streaming

    目录 Structured Streaming 曲折发展史 Spark Streaming Structured Streaming 主要优势 编程模型 ●核心思想 ●应用场景 ●WordCount图 ...

  5. Structured Streaming编程 Programming Guide

    Structured Streaming编程 Programming Guide • Overview • Quick Example • Programming Model o Basic Conc ...

  6. 2021年大数据Spark(五十三):Structured Streaming Deduplication

    目录 Streaming Deduplication 介绍 需求 ​​​​​​​代码演示 Streaming Deduplication 介绍 在实时流式应用中,最典型的应用场景:网站UV统计. 1: ...

  7. 2021年大数据Spark(五十二):Structured Streaming 事件时间窗口分析

    目录 事件时间窗口分析 时间概念 ​​​​​​​event-time ​​​​​​​延迟数据处理 ​​​​​​​延迟数据 ​​​​​​​Watermarking 水位 ​​​​​​​官方案例演示 事件 ...

  8. 2021年大数据Spark(五十一):Structured Streaming 物联网设备数据分析

    目录 ​​​​​​​物联网设备数据分析 ​​​​​​​设备监控数据准备 ​​​​​​​创建Topic ​​​​​​​模拟数据 ​​​​​​​SQL风格 ​​​​​​​DSL风格 物联网设备数据分析 在 ...

  9. 2021年大数据Spark(五十):Structured Streaming 案例一实时数据ETL架构

    目录 案例一 实时数据ETL架构 准备主题 ​​​​​​​模拟基站日志数据 ​​​​​​​实时增量ETL 案例一 实时数据ETL架构 在实际实时流式项目中,无论使用Storm.SparkStreami ...

最新文章

  1. python项目之网络聊天室_Python实现多人聊天室
  2. 机器学习经典分类算法 —— C4.5算法(附python实现代码)
  3. 【django】创建模型类
  4. 【网络安全】ollvm反混淆学习
  5. mysql-5.7.13-winx64如何安装_mysql 5.7.13 winx64安装配置方法图文教程
  6. 2017年秋招-广联达面试及思考
  7. SecureRandom-随机数的生成
  8. python的pip换源_[Python]Pip换源以及设置代理
  9. 完美解决banner图片适应分辨率不同的问题
  10. Python入门深度学习完整指南
  11. 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0” 提供程序解决办法
  12. 【Java必备技能三】自定义注解
  13. CUDA编成:从GPU的物理体系结构到逻辑结构
  14. HTML/CSS制作网页
  15. 串口通信协议c语言程序,串口通信协议源代码.doc
  16. 前端过滤特殊字符、表情包
  17. UVALive 3959 Rectangular Polygons (排序贪心)
  18. 单词短时间记忆法和艾宾浩斯遗忘曲线
  19. Pytorch求张量的倒数
  20. 2021Android面经,历时一个半月,斩获3个大厂offer

热门文章

  1. Double类型精度问题引起的错误
  2. centos 监视文件变动脚本
  3. 沈阳市养老保险停保单如何打印,停保变动通知单的打印方法
  4. CSDN社区运营午餐会第1期 – 人在驴途
  5. centos7下安装nginx
  6. 360浏览器保存网页html,如何设置360浏览器网页保存类型默认为html
  7. 小猫钓鱼的判断 C语言实现(未优化)
  8. 诺基亚2016年会重返智能手机市场?
  9. 第一代社交机器人已死:商业模式错误还是生不逢时?
  10. php开奖采集看哪里,php知道与问问的采集插件代码