当前位置: 首页 > news >正文

RabbitMQ,Kafka八股(自用笔记)

RabbitMQ

异步发送(验证码,短信,邮件)

MYSQL和redis,ES之间的数据同步

分布式事务

削峰填谷

生产者确认机制

publisher confirm

回调方法即时发送

记录日志

保存数据库,发送成功后删除

消息持久化

交换机持久化:第二个参数

队列持久化:durable创建持久化

消息持久化:DeliverMode指定

消费者确认

SpringAMQP 高级消息队列协议

手动ack 调用api

自动ack(常用)

none:关闭ack 投递立即删除

消息重复消费

网络抖动

消费者挂了

1.每条消息设置唯一id

2.幂等:分布式锁,数据库锁(悲观锁,乐观锁)

死信交换机

延迟队列=死信交换机+TTL(消息会被延迟消费)

超时订单,限时优惠,定时发布

1.消费者使用basic.reject或basic.nack并且requeue为false

2.过期消息,超时无人消费

3.投递的消息队列满了,最早投递的成为死信

队列绑定死信交换机

TTL

消息存活时间和队列存活时间取最小值

延迟队列插件

声明交换机:设置delayed属性

消息堆积怎么解决

1.增加消费者

2.消费者开启线程池加快消息处理速度

3.扩大队列容积,提高堆积上限

惰性队列

队列声明时开启lazy

接受消息存入磁盘

消费时从磁盘读入内存

支持百万存储

高可用(集群)

普通集群(标准集群)

集群各个节点共享数据(交换机,队列元信息,不包含消息信息)

队列所在节点传递到当前节点返回

队列所在节点宕机,消息丢失

镜像集群(主从模式)

交换机、队列、消息会在镜像节点同步备份

创建队列的节点主节点,备份节点镜像节点

一个队列的主节点可能是另一个队列的镜像节点

主宕机,镜像成为新的主

仲裁集群(主从模式)

功能同镜像集群

主从同步基于Raft,强一致(.quorum)

Kafka

数据不丢失

1.生产者到Brocker

设置异步发送(传入一个回调函数,处理回调的结果)

消息重试(设置重试次数)

2.Brocker消息存储

发送确认机制acks

acks = 0 速度最快,不等待服务器响应

acks = 1(默认)集群首领节点响应

acks = all 所有赋值节点全部接收到,统一响应一个成功

3.消费者接收

分区机制:一个主题多个分区

分区消息只能由消费者组中唯一一个消费者处理,

不同分区分给不同消费者(但是同一个消费者组)

重平衡:消费者个数变化,分区个数变化触发

消费者默认提交自动按期提交消费偏移量(5s提交一次)

重平衡可能会重复消费或丢失数据

同步+异步提交:

Finally里使用同步提交是为了保证最后一次消费记录不会丢失

只发生在关闭消费者的时候,其他时候都是异步提交

消费的顺序性

同一个分区消息由消费者组中唯一消费者消费,

保证Topic的一个分区顺序处理,不保证跨分区

发送消息时指定分区号

相同业务相同key(分区默认通过key的hashcode选择分区)

高可用机制(集群,分区备份机制)

分区备份机制:

一个topic多个分区,每个分区有多个副本

其中一个leader,其余follower(副本),副本存储到不同的broker

leader故障,follower升级leader

leader

同步复制保存的follower为ISR

异步复制保存的follower为普通follower

选举原则:

优先从ISR选leader,没有则从普通follower

文件存储机制

.index 索引文件

.log 数据文件

.timeindex 时间索引文件

分段

便于删除无用文件

查找数据方便

数据清理机制

超过保存时间清理(自动触发)

日志文件(.log文件)超过一定阈值,删除最久消息(手动开启)

实现高性能

消息分区(多台服务器)

顺序读写(磁盘顺序读写)

页缓存(对内存访问)

零拷贝(上下文切换(用户内核),减少数据拷贝)

消息压缩(磁盘io,网络io)

分批发送(打包批量发送)

页缓存

磁盘->页缓存->网卡->消费者

省去了页缓存到kafka,kafka到socket缓冲区,缓冲区复制到网卡

相关文章:

  • Postman启动时检测到版本不匹配错误
  • 【前端三剑客】Ajax技术实现前端开发
  • Ansible安装与核心模块实战指南
  • IoTDB集群的一键启停功能详解
  • 开源网络地图可视化第六章学习指南
  • 电脑声音小怎么调大 查看声音调整方法
  • 什么叫裸机开发
  • Fiori学习专题四十一:表单控件
  • Gemini 2.5 推动视频理解进入新时代
  • Python爬虫常用项
  • 数据结构——例题1
  • [特殊字符]CentOS 7.6 安装 JDK 11(适配国内服务器环境)
  • LeetCode热题100--206.反转链表--简单
  • MongoDB 的主要优势和劣势是什么?适用于哪些场景?
  • LeetCode 热题 100_多数元素(97_169_简单_C++)(哈希表;排序)
  • 【2025年前端高频场景题系列】使用同一个链接,如何实现PC打开是web应用、手机打是-个H5 应用?
  • UE5通过C++实现TcpSocket连接
  • X1A000171000300,FC2012AN,32.768kHz,2012mm,EPSON晶振
  • 【Flask全栈开发指南】从零构建企业级Web应用
  • 影刀RPA开发-CSS选择器介绍
  • 夜读|尊重生命的棱角
  • 法治课|争议中的“行人安全距离”于法无据,考量“注意义务”才更合理
  • 英国首相斯塔默住所起火,警方紧急调查情况
  • “无锡景・江南韵”:中国评弹艺术在尼日利亚收获众多粉丝
  • 民企老板被错羁212天续:申请国赔千万余元,要求恢复名誉赔礼道歉
  • 水豚出逃40天至今未归,江苏扬州一动物园发悬赏公告