SparkStreaming

SparkStreaming第一次运行时不丢失数据

auto.offset.reset = earliest

Kafka和SparkStreaming整合时:

注意:和SparkStreaming整合时,上面的可选参数是无效的,只有两个可选参数:

  1. smallest:简单理解为从头开始消费,其实等价于上面的 earliest
  2. largest:简单理解为从最新的开始消费,其实等价于上面的 latest

参数角度:

1)调大每次获取的数据量

spark.streaming.kafka.maxRatePerPartition 参数来控制每个 Kafka 分区每秒最大接收的数据量

2)轮询间隔 

spark.streaming.kafka.consumer.poll.ms 参数来调整 Kafka 消费者的轮询间隔,以减少消费者获取数据的延迟

3)checkpoint的目录设置在可靠的文件系统上

SparkStreaming 整合Kafka 实现精确一次消费

1.手动维护偏移量(kafka)

2.做完维护业务数据操作后,提交偏移量。

极端情况下在checkpoint提交时断电导致重复消费,所以在涉及金额等精确性非常高的环境里就使用 事务+偏移量 去保证精确一次消费。

默认消费Kafka后是自动提交偏移量的(默认5秒自动提交一次)

实现精确一次消费的常见方法:

生产者

1.消息队列的集成,如kafka,可以使用 Kafka 的 Offset 来记录已消费的消息的偏移量,并定期提交偏移量到 Kafka 的特殊主题中。在出现故障后,可以使用提交的偏移量来恢复消费过程,并确保不会重复消费数据。

消费者

2.写入外部存储:将接收到的数据写入外部存储系统(如 HDFS 或分布式数据库),并定期记录已处理数据的标识(如文件的偏移量或处理时间戳)。在故障恢复时,可以根据记录的标识来确定从哪里恢复数据处理

3.事务性写入:使用支持事务性写入的外部存储,如 Apache HBase 或 Apache Phoenix,可以在写入数据时确保事务的原子性,以避免数据丢失或重复写入。

SS内部:

内部状态管理:使用 Spark Streaming 内部的状态管理机制,如窗口操作或累加器,可以跟踪已处理数据的状态,并在故障恢复时使用该状态来恢复处理过程。

SS的checkpoint机制:

使用StreamingContext对象的checkpoint()设置路径,可以实现在指定路径周期性的记录ss的一些元数据和状态信息,再通过对象的getorCreate()获得这些checkpoint信息StreamingContext,自动加载之前保存的 Checkpoint。

SparkStreaming控制每秒消费数据的速度

通过 spark.streaming.kafka.maxRatePerPartition 参数来设置 Spark Streaming 从 kafka 分区每秒 拉取的条数

SparkStreaming背压机制

spark.streaming.backpressure.enabled 参数设置为 ture,开启背压机制后 Spark Streaming 会 根据延迟动态去 kafka 消费数据,上限由 spark.streaming.kafka.maxRatePerPartition 参数控制, 所以两个参数一般会一起使用

动态控制SS消费数据的速率,监控数据输入和处理的速率和系统利用率等指标,来自动调节数据处理的速度。当生产数据速度大于消费数据的速度时,背压机制会自动降低数据的输入速率

背压实现的构成组件:

1.direct或receiver:基于d or r连接 监控速率

2.ratecontroller:核心组件,监控数据输入和处理的速率和系统利用率等指标,来自动调节数据处理的速度。

3.BlockGenerator:负责将接收到的数据切分成小块,并提交给ratecontroller处理。

Spark Streaming 一个stage耗时

SS中一个批处理包含若干个stages,每个stage包含多个操作,一个stage耗时是指一个批处理时间内,一个stage完成所需的时间。

SS中数据流被划分为很多的微批,即任务(1个微批=1个任务),是最小的执行单元,一个阶段stage可以包含多个任务。

总结,批处理是对一批数据进行处理,而stage是一组相关任务的逻辑单元,用于执行一系列相互依赖的转换操作。

Spark 引擎负责任务的划分、阶段的调度和任务的执行。整个批处理过程包括数据加载、转换操作、任务划分、阶段调度和结果输出等步骤。

SparkStreaming 优雅的关闭

spark.streaming.stopGracefullyOnShutdown=true,SS会在JVM关闭后 ,关掉 StreamingContext,而不是立马关闭。

yarn application -kill [applicationid]

Spark Streaming 默认分区个数

SparkStreaming默认分区个数与所对接的kafka的topic分区个数保持一致,不会使用repartition去增大分区个数,因为会引起shuffle降低效率。

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

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

相关文章

RabbitMQ安装

这里写目录标题 简介下载ELANG安装ELang配置环境变量安装RabbitMQ 简介 RabbitMQ 是一个开源的遵循 AMQP 协议实现的基于 Erlang语言编写,**即需要先安装部署Erlang环境再安装RabbitMQ环境。**需加注意的是,读者若不想跟着我的版本号下载安装&#xff0…

MacBook Java开发环境搭建记录

一、Homebrew的镜像设置 对于Java JDK的安装,我们更推荐使用Homebrew来进行安装管理。但Homebrew的curl国外源的下载速度实在是一言难尽,时常还会发生无法访问的情况。 那么我们此时的解决方法就有两种了,第一种便是使用全局的VPN代理进行下载…

让你不再疑惑加水印用什么软件

每个人都有自己的独特创意和作品,而在现今互联网时代,分享和传播作品已成为一种普遍现象。然而,随着互联网的发展,越来越多的作品被人恶意盗用和复制,使得原创作者的权益受到了侵害。为了保护自己的作品,加…

【SpringBoot】从零开始封装自己的starter并且引入到其他项目中使用

从零开始封装自己的starter并且引入到其他项目中使用 简介 本文将介绍如何从零开始封装自己的starter并且引入到其他项目中使用 为什么要自己封装starter? 这样可以对spring以及其他第三方提供的starter做二次封装或者封装一些自己需要的内容提供给其他项目使用&…

MySQL五种约束类型(普通 /自增主键,外键等) + 进阶查询(聚合查询,内 /外连接查询,自连接查询,子查询,合并查询)

文章目录 前言一、五种约束NOT NULL 约束UNIQUE 约束DEFAULT 约束PRIMARY KEY 主键约束(重点)普通主键自增主键 FOREIGN KEY 外键约束(重点) 二、进阶查询聚合查询聚合函数GROUP BY子句HAVING 联合查询笛卡尔积内连接外连接自连接子查询单行子查询:返回一行记录的子…

乔云监控tf卡格式化后数据恢复方法

您有没有使用过乔云牌监控设备呢?它通常里面会放置一个TF卡以存储录像,而TF卡长期高温高速运行,容易产生碎片,因此很多商家会建议大家一个月进行一次格式化。但是格式化后您有没有后悔过呢?在这个篇文章中,…

【Python】类型注解 ③ ( 使用 # type: 类型 注释方式设置类型注解 | 类型注解是提示性而非强制性 )

文章目录 一、使用 注释语法 设置 类型注解1、使用 注释语法 设置 类型注解语法介绍2、为 基础类型变量 设置 " 类型注解 "3、为 类 的 对象类型 设置 " 类型注解 "4、为 基础容器类型变量 设置 简易 " 类型注解 "5、为 基础容器类型变量 设置 详…

基于深度学习的高精度工人安全帽检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度工人安全帽检测识别系统可用于日常生活中或野外来检测与定位工人安全帽目标,利用深度学习算法可实现图片、视频、摄像头等方式的工人安全帽目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用…

67、Redis线程模型,单线程快的原因

Redis线程模型,单线程快的原因 一、Redis线程模型二、单线程快的原因 一、Redis线程模型 Redis基于Reactor模式开发了网络事件处理器,这个处理器叫做文件事件处理器file event handler。这个文件事件处理器,它是单线程的,所以 Re…

Windows与Linux取证分析

目录 一、电子数据取证基本概念 1.电子取证学 2.常规取证 3.洛卡德物质交换原理 4.电子数据范围 5.电子数据取证的概念和目的 6.电子数据取证过程 二、Linux系统取证 1.基本信息获取 (1)获取系统基础信息 (2)用户/用户…

共筑开源新长城 龙蜥社区走进开放原子校源行-清华大学站

6 月 28 日,以“聚缘于校,开源共行”为主题的 2023 年开放原子校源行活动在清华大学成功举行。本次活动由开放原子开源基金会和清华大学共同主办,来自各行业的 22 位大咖共聚校园共话开源。龙蜥社区技术专家边子政受邀进行技术分享&#xff0…

UWB天线设计之一种优化扁平超宽带单极的新方法

文章亮点 一种新颖的方法提出了扁平超宽带单极天线。 通过应用收缩,可以设计具有相同性能的更小的天线作为平面单极天线。 优化结果表明该方法能够设计非常小的天线。 在这项研究中,提出了一种优化扁平超宽带单极天线的新方法。在该方法中,一般性地描述了天线的形状。这种一…

Vue+element table+原生js +touch触摸事件实现移动端横向拖动

Vueelement table原生js touch触摸事件实现移动端横向拖动 今天做移动端项目时,想加个表格展示数据,但是调试的时候发现,表格数据很多时,想要触屏左右滑动内容,但是滑动不了,又不想引用插件实现&#xff0c…

LeetCode141.环形链表

141.环形链表 目录 141.环形链表一、哈希表二、双指针 一、哈希表 最容易想到的方法就是遍历所有节点,每次遍历到一个节点的时候,判断该节点此前是否被访问过 我们可以使用哈希表来存储所有已经访问过的节点 每次到达一个节点,如果该节点已…

Web3时代来临:你准备好了吗?

如果你正在浏览本文,那么很可能你已经是Web3时代的一部分了,或者至少是将要成为其中的一员。因为Web3时代即将来临,它将彻底改变我们对互联网的认识和使用方式。 那么,什么是Web3时代呢?简单来说,它是指基于…

JPA实现多对多关系

本文已收录于专栏 《Java》 目录 概念说明优势利弊实现方式通过两个ManyToMany注解实现类图代码 通过OneToMany和ManyToOne注解实现类图代码 少走弯路总结提升 概念说明 多对多关系是指两个实体之间存在多对多的关联关系。在数据库中,多对多关系无法直接表示&#x…

【树链+EXGCD】杭电多校第一场 A

1001 Hide-And-Seek Game (hdu.edu.cn) 题意: 给定一棵树和两条路径,每条路径都有起点和终点,起始时起点有人,每隔一秒都会往终点走一步,会从起点走向终点再会起点这样不断地周期性地走,让你求一点&#…

java图片裁剪

读取文件夹内的所有图片并裁剪返回到指定文件夹。用于图片的快速裁剪,精修图片做不到,毕竟这是程序来做的。 package com.nbomb.route.test;import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.Fi…

React+TypeScript项目中如何使用CodeMirror?

文章目录 前言使用codeMirror注册Js代码提示 前言 之前做需求用到过codeMirror这个工具,觉得还不错,功能很强大,所以记录一下改工具的基础用法,分享给大家。 CodeMirror被广泛应用于许多Web应用程序和开发工具,例如代…

UDP-组播,广播

转自:https://www.cnblogs.com/wangzhilei-src/p/15314315.html UDP是面向非连接的协议,它不与对方建立连接,而是直接把数据报发给对方。UDP无需建立类如三次握手的连接,使得通信效率很高。因此UDP适用于一次传输数据量很少、对可…