1.RabbitMQ如何保证消息不丢失

  1. 开启生产者确认机制,确保生产者的消息能到达队列
  2. 开启持久化功能,确保消息未消费前在队列中不会丢失(交换机,队列,消息都需要开启持久化功能)
  3. 开启消费者确认机制为auto,由spring确认消息处理成功后完成ack
  4. 开启消费者失败重试机制(比如设置最多重试次数为3),多次重试失败后将消息投递到异常交换机,交由人工处理

2.说一说消息重复消费问题

  1. 导致消息重复的原因一般是设置了消息重试机制。但是由于网络抖动或者消费者挂了,导致消息没有被确认还在消息队列中,然后重复发送导致的
  2. 解决这个问题最好的方法是用唯一标识去处理,消费时候去数据库查一下,如果这个消息的唯一标识已经存在了,那么就是已经消费过了
  3. 其次是可以用redis分布式锁或者数据库锁(乐观锁,悲观锁)去解决。

3.说一说RabbitMQ中死信交换机(RabbitMQ延迟队列)

  1. 延迟队列一般的应用场景有超时订单、限时优惠、定时发布等
  2. 延迟队列是用到了死信交换机和TTL(消息存活时间)实现的
  3. 消息超时未消费就会变成死信(死信的其他情况:拒绝被消费,队列满了)
  4. 死信会被放到死信交换机里面,由死信交换机绑定的队列去消费(死信交换机在创建消息队列的时候就需要去指定死信交换机是谁)。
  5. 延迟队列插件也可以实现延迟队列(DelayExchange),发送消息时,添加x-delay头,值为超时时间

4.消息堆积问题如何解决

  1. 增加更多的消费者,提高消费速度
  2. 在消费者内使用线程池,提高消息处理速度
  3. 使用惰性队列,把消息放在磁盘里面,获得更高的存储上限。但是这样受限于磁盘IO,时效性会降低。

5.RabbmitMq怎么解决高可用

  1. 采用镜像模式搭建集群,镜像的结构是一主多从,所有操作时主节点完成,之后同步给从节点。如果主节点宕机,镜像节点会成为新的主节点。但是如果在同步之前主节点就挂了,可能会造成数据丢失。
  2. 采用仲裁队列解决镜像集群可能出现的数据丢失问题,仲裁队列和镜像队列一样都是主从模式,主从同步基于Raft协议,强一致。且使用起来也很方便,只要声明队列的时候表示是仲裁队列即可。

Raft协议: Raft是一种旨在简化实现和理解的分布式系统共识算法。其核心在于通过选举一个“领导者”来处理客户端请求,并将这些请求作为日志条目复制到其他“跟随者”节点,以确保所有节点数据的一致性。每个节点在任一时刻都处于三种状态之一:领导者、跟随者或候选人(用于选举新领导者)。Raft通过任期(逻辑时钟)和严格的日志复制规则保证了即使部分节点故障,系统仍能保持一致性和可用性。简而言之,Raft使分布式系统能够高效、可靠地达成共识,确保数据一致性。

6.Kafka如何保证消息不丢失

需要从三个层面去解决这个问题:

  • 生产者发送消息到Brocker丢失
    – 设置异步发送,发送失败使用回调进行记录或重发
    – 失败重试,参数配置,可以设置重试次数
  • 消息在Brockert中存储丢失
    发送确认acks,选择all,让所有的副本都参与保存数据后确认,但是这样效率最低,可以设置为1,只要集群首领收到消息,即可发送消息确认。
  • 消费者从Brocker接收消息丢失
    – 关闭自动提交偏移量,开启手动提交偏移量
    – 提交方式,最好是同步+异步提交

7.Kafka中消息的重复消费问题如何解决的

  • 关闭自动提交偏移量,开启手动提交偏移量
  • 提交方式,最好是同步+异步提交
  • 使用幂等方案

8.Kafka消费如何保证顺序性

在kafka中,一个topic的数据存储在不同的分区中,每个分区都有按照顺序存储的偏移量,这就导致如果一个消费者关联了多个分区,分区就不能保证连续性。
解决:

  1. 发送消息时指定分区号,将需要顺序消费的消息全部发送到同一分区
  2. 发送消息时,按照业务设置相同的key,核心依然是将需要顺序消费的信息全部发送给同一分区,以此保证消息消费的顺序性

9.Kafka高可用机制了解过吗

Kafka高可用机制主要体现在两个方面
集群:
一个kafka集群由多个broker3实例组成,即使某一台宕机,也不耽误其他broker继续对外提供服务
复制机制:

  • 一个topic有多个分区,每个分区有多个副本,有一个leader,其余的是follower,副本存储在不同的broker中
  • 所有的分区副本的内容是都是相同的,如果leader发生故障时,会自动将其中一个follower提升为leader,保证了系统的容错性、高可用性
  • 分区副本分为两类
    一类是ISR,需要同步保存数据的副本,leader挂掉之后,会优先从ISR选取,一般建议设置一到两个,因为是同步复制,多了影响效率
    一类是普通副本,异步同步数据

10.说一说Kafka的数据清理机制

需要先说明kafka存储结构

  • Kafka中topic的数据存储在分区上,一个分区如果过大就会进行分段存储,及一个分区下可能会存在多个文件段,一个文件段被称为segment
  • 每个文件段都对应了三个日志文件:索引文件(xxx.index)、数据文件(xxx.log)、时间索引文件(xxx.timeindex)。每段的文件名相同,后缀不同
  • 分段的好处是,第一能够减少单个文件内容的大小,查找数据方便,第二方便kafka进行日志清理。

再说明kafaka的两个日志的清理策略

  • 根据消息的保留时间,当消息保存的时间超过了指定的时间,就会触发清理,默认是168小时(7天)
  • 根据topic存储的数据大小,当topic所占的日志文件大小大于一定的阈值,则开始删除最久的消息。(默认关闭)

11.说一说kafka的高性能设计

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

零拷贝

普通拷贝:

  • 从硬件中的磁盘文件到内核空间的页缓存一次
  • 从内核空间的页缓存到用户空间的kafka一次
  • 从用户空间的kafka到内核空间的Socket缓冲区一次
  • 从内核空间的Socket缓冲区到硬件中的网卡一次
    共进行了四次拷贝

零拷贝:

  • 从硬件中的磁盘文件到内核空间的页缓存一次
  • 从内核空间的页缓存到硬件中的网卡一次
    共进行了两次拷贝

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

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

相关文章

Win7重装不翻车!ISO镜像安全下载渠道+BIOS设置避雷手册

一、写在前面:为什么你需要这份教程? 当电脑频繁蓝屏、系统崩溃甚至无法开机时,重装系统可能是最后的救命稻草。但市面上的教程往往存在三大痛点: ⚠️ 镜像来源不明导致系统被植入后门 ⚠️ 启动盘制作失败反复折腾 ⚠️ 操作失…

大学至今的反思与总结

现在是2025年的3月5日,我大三下学期。 自大学伊始,我便以考研作为自己的目标,有时还会做自己考研上岸头部985,211,offer如潮水般涌来的美梦。 但是我却忽略了一点,即便我早早下定了决心去考研,但并没有早…

SpringBoot 全局异常处理

文章目录 异常处理全局异常处理(推荐)局部异常处理高级技巧设置返回状态码处理404异常异常处理 全局异常处理(推荐) 创建一个全局异常处理类,使用 @RestControllerAdvice 注解标记。 在方法上使用 @ExceptionHandler 声明当前方法可处理的异常类型。当系统发生异常时,…

【四.RAG技术与应用】【11.阿里云百炼应用(上):RAG在云端的实践】

一、为什么需要RAG?大模型的“知识困境”与破局之道 大模型虽然“博学”,但它的知识库存在两个致命短板: 缺乏私有知识:比如企业内部的产品手册、客户数据、行业报告等;知识更新滞后:大模型的训练数据往往停留在某个时间点,无法实时获取最新信息(比如今天的股票行情或…

使用wifi连接手机adb进行调试|不使用数据线adb调试手机|找应用错误日志和操作日志

手机在开发者选项里要开启无线调试 在手机设置中查看WiFi的IP地址 设置 -> WLAN -> 已连接的WiFi -> IP地址 使用手机的IP地址连接 adb connect 192.168.1.12:xxxxx 检查连接状态 adb devices 断开特定设备 adb disconnect 192.168.x.x:xxxxx 断开所有设备 …

mapbox高阶,结合threejs(threebox)添加三维球体

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️threebox Sphere静态对象二、🍀使用t…

游戏引擎学习第140天

回顾并为今天的内容做准备 目前代码的进展到了声音混音的部分。昨天我详细解释了声音的处理方式,声音在技术上是一个非常特别的存在,但在游戏中进行声音混音的需求其实相对简单明了,所以今天的任务应该不会太具挑战性。 今天我们会编写一个…

golang并发编程如何学习

《掌握 Golang 并发编程的通关秘籍》 在当今的编程世界中,Golang 并发编程正以其独特的魅力和强大的能力吸引着众多开发者。然而,对于许多小伙伴来说,如何学好这门技术却成了一个头疼的问题。别担心,今天就让我来为大家揭开 Gola…

SpringMVC学习(controller层加载控制与(业务、功能)bean加载控制、Web容器初始化配置类)(3)

目录 一、SpringMVC、Spring的bean加载控制。 &#xff08;1&#xff09;实际开发的包结构层次。 &#xff08;2&#xff09;如何"精准"控制两个容器分别加载各自bean。(分析) <1>SpringMVC相关bean加载控制。(方法) <2>Spring相关bean加载控制。(方法) …

fastapi+mysql实现增删改查

说明&#xff1a; 我计划用python的fastapi框架&#xff0c;实现操作MySQL数据库的表&#xff0c;实现增删改查的操作&#xff0c;并且在postman里面测试 step1: 安装数据库依赖 pip install fastapi uvicorn pymysqlstep2:C:\Users\Administrator\PycharmProjects\FastAPIPro…

Linux系统之配置HAProxy负载均衡服务器

Linux系统之配置HAProxy负载均衡服务器 前言一、HAProxy介绍1.1 HAProxy简介1.2 主要特点1.3 使用场景二、本次实践介绍2.1 本次实践简介2.2 本次实践环境规划三、部署两台web服务器3.1 运行两个Docker容器3.2 编辑测试文件3.3 访问测试四、安装HAProxy4.1 更新系统软件源4.2 安…

CS144 Lab Checkpoint 2: the TCP receiver

Overview TCPReceiver 从对等的sender接收消息&#xff0c;使用 receive() 方法&#xff0c;然后调用 Reassembler() 方法&#xff0c;后者写入 ByteStream 中 然后应用程序从 ByteSteam 中读取。 同时&#xff0c;TCPReceiver 还会通过 send() 方法给sender发送消息&#xff…

Spring Boot 3.x 核心注解详解与最佳实践

Spring Boot 3.x 核心注解详解与最佳实践 前言 随着Spring Boot 3.x的正式发布&#xff0c;这个基于Spring Framework 6的里程碑版本带来了诸多新特性。本文将深入剖析Spring Boot 3.x的核心注解体系&#xff0c;结合代码示例讲解其作用及使用场景&#xff0c;助您快速掌握新…

PHP之常量

在你有别的编程语言的基础下&#xff0c;你想学习PHP&#xff0c;可能要了解的一些关于常量的信息。 PHP中的常量不用指定数据类型&#xff0c;可以使用两次方法定义。 使用const //定义常量 const B 2; echo B . PHP_EOL;使用define define("A", 1); echo A . P…

计算机网络——子网掩码

一、子网掩码是什么&#xff1f;它长什么样&#xff1f; 子网掩码的定义 子网掩码是一个32位的二进制数字&#xff0c;与IP地址“配对使用”&#xff0c;用于标识IP地址中哪部分属于网络地址&#xff0c;哪部分属于主机地址。 示例&#xff1a;IP地址 192.168.1.10&#xff0c;…

Tomcat-web服务器介绍以及安装部署

一、Tomcat简介 Tomcat是Apache软件基金会&#xff08;Apache Software Foundation&#xff09;的Jakarta 项目中的一个核心项目&#xff0c;由Apache、Sun和其他一些公司及个人共同开发而成。 Tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;属于轻量级应用…

分布式存储—— HBase数据模型 详解

目录 1.3 HBase数据模型 1.3.1 两类数据模型 1.3.2 数据模型的重要概念 1.3.3 数据模型的操作 1.3.4 数据模型的特殊属性 1.3.5 CAP原理与最终一致性 1.3.6 小结 本文章参考、总结于学校教材课本《HBase开发与应用》 1.3 HBase数据模型 在开始学习HBase之前非常…

android中activity1和activity2中接收定时消息

android中activity1和activity2中接收定时消息 业务类 import java.util.Timer; import java.util.TimerTask;public class MyAnager {private MyAnager() {}private static MyAnager instance;//回调接口onRecvTaskpublic interface OnMsgListener {void onRecvTask(String a…

BitMap实现用户签到、UV统计

1. Redis 的 BitMap 概述 在 Redis 中&#xff0c;BitMap 并非一种独立的数据结构&#xff0c;而是基于 String 类型数据结构实现的一种存储方式。由于 String 类型的最大上限是 512M&#xff0c;换算成 bit 位就是 2^32 个&#xff0c;这决定了 BitMap 可操作的最大范围。Bit…

共享模型之管程(悲观锁)

共享模型之管程&#xff08;悲观锁&#xff09; 文章目录 共享模型之管程&#xff08;悲观锁&#xff09;一、常见线程安全的类二、对象头三、Monitor&#xff08;监视器 / 管程&#xff09;四、偏向锁偏向锁的实现原理撤销偏向锁 五、轻量级锁轻量级锁的释放 六、重量级锁七、…