大数据 笔记

news2025/5/23 23:03:07

kafka

kafka作为消息队列为什么发送和消费消息这么快?

  • 消息分区:不受单台服务器的限制,可以不受限的处理更多的数据
  • 顺序读写:磁盘顺序读写,提升读写效率
  • 页缓存:把磁盘中的数据缓存到内存中,把对磁盘的访问变为对内存的访问
  • 零拷贝:减少上下文切换及数据拷贝
  • 消息压缩:减少磁盘IO和网络IO
  • 分批发送:将消息打包批量发送,减少网络开销


 

消息丢失

一、生产者端防丢失
  1. ​使用带回调的发送API​
    • 避免使用producer.send(msg),改用producer.send(msg, callback),通过回调确认发送结果。
  2. ​配置重试机制​
    • 设置retries > 0(如3),自动重试因网络抖动导致的发送失败。
  3. ​设置高可靠性参数​
    • acks=all:确保Leader和所有ISR副本都持久化消息后才返回确认。
二、Broker端防丢失
  1. ​禁用非同步Leader选举​
    • 设置unclean.leader.election.enable=false,防止落后副本成为Leader导致数据丢失。
  2. ​多副本冗余​
    • replication.factor >= 3:至少3个副本存储消息。
  3. ​最小同步副本数​
    • min.insync.replicas > 1(如2),确保消息写入多个副本才视为成功。
    • 需满足replication.factor > min.insync.replicas(如3副本+2最小同步)。
三、消费者端防丢失
  1. ​关闭自动提交位移​
    • 设置enable.auto.commit=false,改为手动提交位移。
  2. ​同步+异步组合提交
try {
    while (true) {
        ConsumerRecords<String, String> records = consumer.poll();
        process(records); // 处理消息
        consumer.commitAsync(); // 异步提交(非阻塞)
    }
} catch (Exception e) {
    handle(e);
} finally {
    consumer.commitSync(); // 最终同步提交(确保位移正确)
    consumer.close();
}

如何解决消息积压问题

消息积压会导致很多问题,⽐如磁盘被打满、⽣产端发消息导致kafka性能过慢,最后导致出现服务雪崩不可用,解决方案如下:

  • 如果是Kafka消费能力不足,则可以考虑增加Topic的分区数,并且同时提升消费组的消费者数量,消费者数 = 分区数。因为主题的一个分区只能被消费者组中一个消费者消费,假如我们消费者组里有3个消费者,但是主题就一个分区,这就白白空着两个消费者无所事事。如果已经是多个消费者对应多个分区了,还是消费比较慢,就说明是消息消息的代码逻辑过重处理过慢,可以引入多线程异步操作,但这时候需要自己控制代码逻辑来保证消费的顺序性,因为一个分区内的消息是有序的,被一个消费者顺序消费,但是当消费者开启多线程处理之后就不能保证顺序消费了。
  • 如果是下游的数据处理不及时:提高每批次拉取的数量。批次拉取数据过少(拉取数据/处理时间 < 生产速度),使处理的数据小于生产的数据,也会造成数据积压。比如说可以从一次最多拉取500条,调整为一次最多拉取1000条。简单来说就是在消费能力跟得上的同时,尽量保证消费速度>生产速度,这样就不会堆积了。

重复消费

生产者幂等性(enable.idempotence=true)​
  • ​原理​​:Kafka通过Producer ID (PID)Sequence Number实现。每个生产者初始化时分配唯一PID,每条消息携带递增序列号。Broker会校验序列号,拒绝重复消息
props.put("enable.idempotence", "true");
props.put("acks", "all");  // 必须配合acks=all

消费者手动提交Offset​

  • ​问题​​:自动提交可能导致消息处理未完成但Offset已提交,引发重复消费
  • ​解决方案​​:
    • ​同步提交​​:确保Offset提交成功后再处理下批数据,但阻塞性能
    • ​异步提交​​:非阻塞但可能失败,需结合重试机制
props.put("enable.auto.commit", "false");
consumer.commitSync();  // 或commitAsync()

Redis

持久化

AOF日志(存操作命令,比较完整,文件较大),RDB快照(存二进制数据,比较快,文件较小)

AOF:

Redis 是先执行写操作命令后,才将该命令记录到 AOF 日志里的,这么做有两个好处。

1.避免额外的检查开销。因为如果先将写操作命令记录到 AOF 日志里,再执行该命令的话,如果当前的命令语法有问题,那么如果不进行命令语法检查,该错误的命令记录到 AOF 日志里后,Redis 在使用日志恢复数据时,就可能会出错。

2.不会阻塞当前写操作命令的执行.因为当写操作命令执行成功后,才会将命令记录到 AOF 日志。

写回:在redis.conf配置文件中的appendfsync配置项可以有以下3种参数可:填

Always,Everysec,No,无法同时兼顾“主进程阻塞”和“减少数据丢失”

RDB:

save 是在主线程生成RDB文件,会阻塞主线程

bgsave 会创建一个子进程来生成RDB文件,这样可以避免主线程的阻塞

另外在执行过程中,reids依然可以继续处理操作命令,因为是“写时复制”(fork

什么是缓存雪崩、缓存击穿、缓存穿透

1缓存雪崩

​原因​​:

  • 大量缓存数据​​同时过期​
  • Redis​​集群宕机​

​应对方法​​:

  • ​数据过期​​:
    • 均匀设置过期时间(加随机值)
    • 互斥锁(单线程重建缓存)
    • 后台线程定时更新缓存(不设过期时间)
  • ​集群宕机​​:
    • 服务熔断/限流(保护数据库)
    • 构建Redis高可用集群(主从切换)

2. 缓存击穿

​原因​​:

  • ​热点数据突然过期​​,大量请求直接击穿到数据库

​应对方法​​:

  • 互斥锁(防止并发重建)
  • 热点数据永不过期 + 后台异步更新

3. 缓存穿透

​原因​​:

  • 请求的数据​​既不在缓存也不在数据库​​(恶意攻击或误删)

​应对方法​​:

  • 接口校验(过滤非法请求)
  • 缓存空值/默认值
  • 布隆过滤器(快速判断数据是否存在)

​核心区别​​:

  • 雪崩/击穿:数据​​最终存在​​,但缓存失效导致数据库压力。
  • 穿透:数据​​根本不存在​​,需拦截无效请求。

缓存与数据库两者的数据不一致

1 先更新数据库再删除缓存  策略

读操作:先读缓存,缓存命中直接返回,缓存没有命中,读数据库,先返回给缓存,再返回给用户。

写操作:更新数据库,然后删除缓存

2 先更新数据库再更新缓存  策略

在更新缓存前先加个分布式锁,保证同一时间只运行一个请求更新缓存,就会不会产生并发问题了,当然引入了锁后,对于写入的性能就会带来影响。

在更新完缓存时,给缓存加上较短的过期时间,这样即时出现缓存不一致的情况,缓存的数据也会很快过期,对业务还是能接受的。

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

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

相关文章

【数据库】-1 mysql 的安装

文章目录 1、mysql数据库1.1 mysql数据库的简要介绍 2、mysql数据库的安装2.1 centos安装2.2 ubuntu安装 1、mysql数据库 1.1 mysql数据库的简要介绍 MySQL是一种开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;由瑞典MySQL AB公司开发&#xff0c;目前…

物流项目第五期(运费计算实现、责任链设计模式运用)

前四期&#xff1a; 物流项目第一期&#xff08;登录业务&#xff09;-CSDN博客 物流项目第二期&#xff08;用户端登录与双token三验证&#xff09;-CSDN博客 物流项目第三期&#xff08;统一网关、工厂模式运用&#xff09;-CSDN博客 物流项目第四期&#xff08;运费模板列…

X 下载器 2.1.42 | 国外媒体下载工具 网页视频嗅探下载

X 下载器让你能够轻松地从社交应用如Facebook、Instagram、TikTok等下载视频和图片。通过内置浏览器访问网站&#xff0c;它能自动检测视频和图片&#xff0c;只需点击下载按钮即可完成下载。去除广告&#xff0c;解锁本地会员&#xff0c;享受无广告打扰的下载体验。 大小&am…

STM32 CAN CANAerospace

STM32的CAN模块对接CANAerospace 刚开始报错如下. 设备开机后整个CAN消息就不发了. USB_CAN调试器报错如下. index time Name ID Type Format Len Data00000001 000.000.000 Event 总线错误 DATA STANDARD 8 接收过程错误-格…

完整改进RIME算法,基于修正多项式微分学习算子Rime-ice增长优化器,完整MATLAB代码获取

1 简介 为了有效地利用雾状冰生长的物理现象&#xff0c;最近开发了一种优化算法——雾状优化算法&#xff08;RIME&#xff09;。它模拟硬雾状和软雾状过程&#xff0c;构建硬雾状穿刺和软雾状搜索机制。在本研究中&#xff0c;引入了一种增强版本&#xff0c;称为修改的RIME…

服务器安装xfce桌面环境并通过浏览器操控

最近需要运行某个浏览器的脚本&#xff0c;但是服务器没有桌面环境&#xff0c;无法使用&#xff0c;遂找到了KasmVNC&#xff0c;并配合xfce实现低占用的桌面环境&#xff0c;可以直接使用浏览器进行操作 本文基于雨云——新一代云服务提供商的Debian11服务器操作&#xff0c;…

Oracle 创建外部表

找别人要一下数据&#xff0c;但是他发来一个 xxx.csv 文件&#xff0c;怎么办&#xff1f; 1、使用视图化工具导入 使用导入工具导入&#xff0c;如 DBeaver&#xff0c;右击要导入的表&#xff0c;选择导入数据。 选择对应的 csv 文件&#xff0c;下一步就行了&#xff08;如…

大语言模型 17 - MCP Model Context Protocol 介绍对比分析 基本环境配置

MCP 基本介绍 官方地址&#xff1a; https://modelcontextprotocol.io/introduction “MCP 是一种开放协议&#xff0c;旨在标准化应用程序向大型语言模型&#xff08;LLM&#xff09;提供上下文的方式。可以把 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 提供了一种…

【软考向】Chapter 9 数据库技术基础

基本概念数据库的三级模式结构 数据模型E-R 模型关系模型各种键完整性约束 关系代数5 种基本的关系代数运算&#xff1a;并、差、笛卡儿积、投影和选择扩展的关系代数运算&#xff1a;交(Intersection)、连接(Join)、除(Division)、广义投影(Generalized Projection)、外连接(O…

实战:Dify智能体+Java=自动化运营工具!

我们在运营某个圈子的时候&#xff0c;可能每天都要将这个圈子的“热门新闻”发送到朋友圈或聊天群里&#xff0c;但依靠传统的实现手段非常耗时耗力&#xff0c;我们通常要先收集热门新闻&#xff0c;再组装要新闻内容&#xff0c;再根据内容设计海报等。 那怎么才能简化并高…

STM32单片机GUI系统1 GUI基本内容

目录 一、GUI简介 1、emWin 2、LVGL (Light and Versatile Graphics Library) 3、TouchGFX 4、Qt for Embedded 5、特性对比总结 二、LVGL移植要求 三、优化LVGL运行效果方法 四、LVGL系统文件 一、GUI简介 在嵌入式系统中&#xff0c;emWin、LVGL、TouchGFX 和 Qt 是…

应届本科生简历制作指南

一、找一个专业的简历模板 首先&#xff0c;你需要访问 Overleaf 的官方网站&#xff0c;也就是Overleaf, Online LaTeX Editor&#xff0c;进入页面后&#xff0c;点击注册按钮&#xff0c;按照提示填写相关信息来创建一个属于自己的账号&#xff0c;通常需要填写用户名、邮箱…

PyTorch可视化工具——使用Visdom进行深度学习可视化

文章目录 前置环境Visdom安装并启动VisdomVisdom图形APIVisdom静态更新API详解通用参数说明使用示例Visdom动态更新API详解1. 使用updateappend参数2. ~~使用vis.updateTrace方法~~3. 完整训练监控示例 Visdom可视化操作散点图plot.scatter()散点图案例线性图vis.line()vis.lin…

企业级爬虫进阶开发指南

企业级爬虫进阶开发指南 一、分布式任务调度系统的深度设计 1.1 架构设计原理 图表 1.2 核心代码实现与注释 分布式锁服务 # distributed_lock.py import redis import timeclass DistributedLock:def __init__(self, redis_conn):self.redis = redis_connself.lock_key = …

网络安全-等级保护(等保) 2-7 GB/T 25058—2019 《信息安全技术 网络安全等级保护实施指南》-2019-08-30发布【现行】

################################################################################ GB/T 22239-2019 《信息安全技术 网络安全等级保护基础要求》包含安全物理环境、安全通信网络、安全区域边界、安全计算环境、安全管理中心、安全管理制度、安全管理机构、安全管理人员、安…

数据结构实验10.1:内部排序的基本运算

文章目录 一&#xff0c;实验目的二&#xff0c;实验内容1. 数据生成与初始化2. 排序算法实现&#xff08;1&#xff09;直接插入排序&#xff08;2&#xff09;二分插入排序&#xff08;3&#xff09;希尔排序&#xff08;4&#xff09;冒泡排序&#xff08;5&#xff09;快速…

wps编辑技巧

1、编辑模式 2、图片提取方法&#xff1a;右键保存图片 可以直接右键保存下来看看是否是原始图&#xff0c;如果歪着的图&#xff0c;可能保存下来是正的&#xff0c;直接保存试下 3、加批注

开放世界RPG:无缝地图与动态任务的拓扑学架构

目录 开放世界RPG:无缝地图与动态任务的拓扑学架构引言第一章 地图分块系统1.1 动态加载算法1.2 内存管理模型第二章 任务拓扑网络2.1 任务依赖图2.2 动态可达性分析第三章 NPC行为系统3.1 行为森林架构3.2 日程规划算法第四章 动态事件系统4.1 事件传播模型4.2 玩家影响指标第…

【图像处理入门】1. 数字图像的本质:从像素到色彩模型

作为图像处理的开篇&#xff0c;本文将带你拆解数字图像的底层逻辑&#xff1a;从模拟图像到数字信号的神奇转换&#xff0c;到像素世界的微观构成&#xff0c;再到彩色图像的编码奥秘。通过 Python 代码实战&#xff0c;你将亲手触摸图像的 “基因”—— 像素值&#xff0c;并…

(已解决:基于WSL2技术)Windows11家庭中文版(win11家庭版)如何配置和使用Docker Desktop

目录 问题现象&#xff1a; 问题分析&#xff1a; 拓展&#xff1a; 解决方法&#xff1a; 1、使用WSL2技术&#xff08;亲测有效&#xff09; 注意&#xff1a; 2、开启Hyper-V功能&#xff08;未经亲测&#xff0c;待研究&#xff09; 问题现象&#xff1a; 今天想在本…