Spark实时(二):StructuredStreaming编程模型

文章目录

StructuredStreaming编程模型

一、基础语义

二、事件时间和延迟数据

三、​​​​​​​​​​​​​​容错语义


StructuredStreaming编程模型

一、基础语义

Structured Streaming处理实时数据思想是将实时数据看成一张没有边界的表,数据源源不断的追加到这张表中,这可以让我们能像处理批数据一样处理实时数据。如下图所示,每条实时数据到来之后都对应“无界表”中的一条数据追加到表中。

以WordCount为例,Spark会针对每次增量的数据进行计算,将结果输出出来,如下图所示: 

 

注意:StructuredStreaming并不会将每次输出的数据物化存储起来,而是每次计算都将结果状态保存起来,下个批次计算是基于当前批次数据和状态值进行计算,计算完成后会把当前批次数据丢弃。 

二、​​​​​​​​​​​​​​事件时间和延迟数据

对于流式数据处理时,我们更希望使用事件时间evnet time来对数据进行窗口划分,事件时间一般嵌入到数据本身,是数据中的一个列,例如:Iot设备产生实时数据时,我们对这些数据进行处理时,我们希望使用事件产生的时间,即:event time,而不希望使用Spark接收这些事件的时间进行窗口划分数据分析。Structured Streaming中事件时间是实时增量数据行中的一个列值,Structured Streaming可以针对这个列值进行窗口划分对数据进行聚合处理,这种基于事件时间的窗口划分可以将流数据处理的更加精准。

此外,Structured Streaming 基于事件时间处理数据时还支持对延迟数据的处理,当有延迟数据到达时,Structured Streaming可以基于事件时间找到对应的窗口对数据进行更新。从Spark2.1开始支持Watermarking,Watermarking允许用户指定数据延迟时间的阈值,并根据阈值来自动清理旧状态。

三、​​​​​​​​​​​​​​容错语义

Structured Streaming提供端到端恰好消费一次的语义。在Structured Streaming中有Source、Sink和执行引擎来可靠的跟踪数据处理的进度,其原因是将处理的每个流数据源都看做有偏移量(类似Kafka offset)来跟踪流中的数据位置,Structured Streaming使用checkpoint和WAL预写日志机制来记录每次触发处理的数据偏移范围,Sink在内部也被设计为幂等操作,在发生故障时Structured Streaming根据以上来确保端到端精准消费一次的语义。

在Structured Streaming中向HDFS中写入数据、ForeachSink自定义写出(写出需支持幂等写出,如RDBMS写出)已经实现“exactly-once”端到端语义,向Kafka写出、console写出目前不支持“exactly-once”端到端语义。


  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/49449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

年化22.8%的单因子分析:基于Alphalens做可转债全市场数据的单因子分析(附python代码+全量数据)

原创文章第597篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 因子分析是量化研究的基本技能之一。通过因子分析,找出有效的因子,通过相关性去重后,就可以通过机器学习、线性回归等方法把因子组合起来&#xf…

Linux基础学习day1

1.Linux系统介绍 1.常见的操作系统 1.Windows(NT内核)不开源 2.ubantu(linux内核) 3.ios(unix内核)不开源 4.鸿蒙(兼容linux内核) 5.Android(linux内核&#xff09…

STM32(七):STM32指南者-通信实验

目录 一、基本概念通讯基本概念1、串行和并行2、同步通讯与异步通讯3、全双工、半双工、单工4、通讯速率 USART基本概念1、串口通讯基本概念2、物理层3、协议层4、指南者的串口USART I2C基本概念SPI基本概念 二、USART串口实验前期准备1、安装安装 USB 转串口驱动_CH3402、野火…

Git之repo sync -l与repo forall -c git checkout用法区别(四十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

微信各平台历史版本含下载地址大全( 安卓 | Windows | MAC )

微信-windows-版本历史 https://github.com/tom-snow/wechat-windows-versions/releases 微信-windows-x86版本历史 https://github.com/tom-snow/wechat-windows-versions-x86/releases 微信安卓版本历史 https://github.com/DJB-Developer/wechat-android-history-version…

Apache DolphinScheduler 3.2.2 版本正式发布!

Apache DolphinScheduler 3.2.2 版本正式发布! 近日,Apache DolphinScheduler 发布了 3.2.2 版本。此版本主要基于 3.2.1 版本进行了 bug 修复,新增若干特性,并进行了众多改进和 Bug 修复,以及文档修复等。 &#x1…

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)是一种开放标准的授权协议,它允许第三方应用程序以安全可控的方式访问受保护的资源,而无需用户将用户名和密码信息与第三方应用程序共享。 一、设计原则 OAuth 2.0的设计旨在解决OAuth 1.0中的…

电路学习——经典运放电路之滞回比较器(施密特触发器)(2024.07.18)

参考链接1: 电子设计教程29:滞回比较器(施密特触发器) 参考链接2: 滞回比较器电路详细分析 参考链接3: 比较器精髓:施密特触发器,正反馈的妙用 参考链接4: 比较器反馈电阻选多大?理解滞后效应,轻…

【iOS】进程与多线程

目录 前言进程和线程进程和线程的区别多线程的意义时间片概念 线程的生命周期线程池的运行策略自旋锁和互斥锁自旋锁互斥锁自旋锁和互斥锁区别原子属性 iOS多线程技术方案 前言 学习此文:iOS多线程 在平时的iOS开发中,多线程是我们常会遇到的&#xff0…

新手教学系列——如何在MacOS 10.13.6(老系统)手动安装和配置Pyenv

前言 对于使用老旧系统(如MacOS 10.13.6)的用户来说,安装和管理Python版本可能会遇到一些挑战。特别是由于Homebrew不再支持老系统,许多软件安装变得困难重重。本文将详细介绍如何在这样的环境下手动安装和配置Pyenv,…

BGP选路之Next Hop

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时,BGP协议会对这些BGP路由的属性进行比较,以确定出去往该目标网络的最优BGP路由,然后将该最优BGP路由与去往同一目标网络的其他协议路由进行比较,从而决定是否将该最优BGP路由放进P路由表中…

数据代理实践

1,什么事数据代理机制? 通过访问 代理对象的属性 来向该访问 目标对象的属性 数据代理机制的视线需要依靠,Object.defineProperty()方法 2, ES6新特性: 在对象中的函数/方法 :function是可以省略的 &l…

宝塔国际版Docker Manager 3.4获取镜像列表报错解决办法

宝塔国际版安装Docker Manager 3.4,遇到获取镜像列表的时候报错。 解决办法 找到:/www/server/panel/plugin/docker/docker_main.py文件 替换函数utc_to_local 原代码 # UTC时间转换为时间戳def utc_to_local(self, utc_time_str, utc_format=%Y-%m-%dT%H:%M:%S):

Android 各个版本兼容型问题

Android 6.0 新增运行时权限,危险权限需要动态申请。 Android 7.0 Android 8.0 允许安装未知来源应用,需要在 AndroidManifest.xml 中声明 REQUEST_INSTALL_PACKAGES 权限。Android8.0取消隐式广播,移除掉了所有的隐式广播。 Android 9.0…

机器学习(五) -- 无监督学习(1) --聚类2

系列文章目录及链接 上篇:机器学习(五) -- 无监督学习(1) --聚类1 下篇: 前言 tips:标题前有“***”的内容为补充内容,是给好奇心重的宝宝看的,可自行跳过。文章内容被…

2个案例区分是平行眼还是交叉眼,以及平行眼学习方法

案例一: 交叉眼:看到凸出的“灌水”,是交叉眼。PS:看的时候,眼是斗鸡眼,眼睛易疲劳 平行眼:看到凹陷的“灌水”,是平行眼。PS:看的时候眼睛是平视,不容易疲…

TFHE中的数据结构Torus

点个关注吧!! 一、理论概念 Torus是一个 [ 0 , 1 ) [0,1) [0,1)的集合(数模1运算)。取值范围通常有符号实数: [ − 1 / 2 , 0 ) ∪ [ 0 , 1 / 2 ) [-1/2,0)\cup [0,1/2) [−1/2,0)∪[0,1/2) 本文用T表示Torus。 T满足…

sqlalchemy使用mysql的json_extract函数查询JSON字段

sqlalchemy使用mysql的json_extract函数查询JSON字段 在SQLAlchemy中,如果你想要在MySQL中存储JSON字段,并且进行查询操作,可以按照以下步骤进行设置和查询: 1. 创建表格 首先,创建一个表格来存储包含JSON字段的数据。假设我们有一个名为 users 的表格,其中有一个名为…

springboot校园车辆管理系统-计算机毕业设计源码63557

校园车辆管理系统 摘 要 校园车辆管理系统是当前高校校园管理中的一个重要方面,其有效管理和调度对于提升校园的运行效率和管理水平至关重要。本论文基于Spring Boot框架开发了一套校园车辆管理系统,系统主要包括用户和管理员两大角色,涵盖…

Windows图形界面(GUI)-MFC-C/C++ - MFC绘图

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 MFC绘图 绘图基础 CPaintDC 实例代码 MFC绘图 绘图基础 设备上下文(Device Context, DC): 设备上下文是一个Windows GDI(图形设备接口&#xff09…