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

基于电商场景的高并发RocketMQ实战-Broker写入读取流程性能优化总结、Broker基于Pull模式的主从复制原理

🌈🌈🌈🌈🌈🌈🌈🌈
【11来了】文章导读地址:点击查看文章导读!
🍁🍁🍁🍁🍁🍁🍁🍁

Broker 写入读取流程性能优化总结

Broker 的物理存储结构主要是为了优化三个方面:写入、存储、读取

写入优化:

  1. 将消息数据写入到 Commitlog 中默认就是写入到了操作系统的 page cache 中,通过 mapped file 机制来实现,将磁盘文件 Commitlog 映射成一块内存区域,将数据写入到内存的 page cache 中就算写入完成了,等待后台线程将内存数据 异步刷入磁盘 即可,这种情况下只有 Broker 所在的机器宕机了,才会导致几百毫秒内的内存数据丢失,这种概率是很小的
  2. Broker 存储数据是主要有三个结构的:Commitlog、ConsumeQueue、IndexFile,可参考文章,数据写入到 Commitlog 中的速度是很快的,再通过 异步 将 Commitlog 中的数据建立成索引写入到 ConsumeQueue、IndexFile,这个过程是异步,对写消息流程没有性能影响,即使写入到 ConsumeQueue、IndexFile 的过程中宕机了,只要 Commitlog 文件还在,Broker 重启之后,就会继续向 ConsumeQueue、IndexFile 中写入索引

存储结构:

  1. ConsumeQueue 存储结构经过了极大的优化设计的。每个消息在 ConsumeQueue 中存储的都是 定长的 20B ,每个 ConsumeQueue 文件可以存储 30w 个消息
  2. Commitlog 存储结构也是精心设计,每个文件 默认 1GB ,满了之后就存下一个文件,避免了某个文件过大,并且每一条消息在所有的 Commitlog 中 记录了有偏移量 ,Commielog 的文件名就是这个文件第一条消息的总物理偏移量

读取优化:

  1. 根据消息逻辑偏移量,来定位到 ConsumeQueue 的磁盘文件,在磁盘文件里就可以根据 逻辑偏移量 计算出 物理偏移量 ,可以直接定位到消息在 Commitlog 中的物理偏移量,通过两次定位就可以读取出数据
  2. 通过 transiendStorePoolEnabled 机制 解决了高并发读写场景下的 Broker busy 问题,实现了读写分离

Broker 基于 Pull 模式的主从复制原理

Broker 主从复制基于 Pull 模式实现的,即生产者将数据写入到 Broker 主节点之后,等待 Slave 向 Master 发送请求,主动拉取数据

Broker 的从节点需要拉取数据时,会向主节点发送请求建立连接,当建立连接之后,在主节点会建立一个 HAConnection 的数据结构,用于将与从节点之间的连接抽象出来,而在从节点会创建两个 HAClient,一个是主从请求线程,另一个是主从响应线程,HAClient 是从节点的核心类,负责与主节点创建连接与数据交互

那么当从节点向主节点发送连接建立,建立好连接之后,Slave 会向 Master 发送一个最大偏移量 Max Offset,那么主节点根据这个 Offset 偏移量去磁盘文件中读取数据,并将数据发送到 Slave,Slave 进行数据的保存,总体流程如下图:

在这里插入图片描述

http://www.lryc.cn/news/269576.html

相关文章:

  • 前端DApp开发利器,Ant Design Web3 正式发布 1.0
  • [RoarCTF 2019]Easy Java(java web)
  • Abaqus许可管理策略
  • 对采集到的温湿度数据,使用python进行数据清洗,并使用预测模型进行预测未来一段时间的温湿度数据。
  • 嵌入式SOC之通用图像处理之OSD文字信息叠加的相关实践记录
  • Java日期工具类LocalDateTime
  • 从C到C++1
  • [Angular] 笔记 18:Angular Router
  • 微服务全链路灰度方案介绍
  • 低代码开发OA系统 低代码平台如何搭建OA办公系统
  • 构建Python的Windows整合包教程
  • 《整机柜服务器通用规范》由OCTC正式发布!浪潮信息牵头编制
  • Linux:修改和删除已有变量
  • 【23.12.29期--Spring篇】Spring的 IOC 介绍
  • 【Python排序算法系列】—— 选择排序
  • 会议室占用时间段 - 华为OD统一考试
  • 计算机网络复习5
  • React Hooks 面试题 | 05.精选React Hooks面试题
  • 2024收入最高的编程语言
  • Android笔记(二十三):Paging3分页加载库结合Compose的实现分层数据源访问
  • Python实现马赛克图片处理
  • 你能描述下你对vue生命周期的理解?在created和mounted这两个生命周期中请求数据有什么区别呢?
  • 【经典算法】有趣的算法之---蚁群算法梳理
  • 第八届视觉、图像与信号处理国际会议(ICVISP 2024) | Ei, Scopus双检索
  • 《HelloGitHub》第 93 期
  • JAVA B/S架构智慧工地源码,PC后台管理端、APP移动端
  • 【adb】--- win10 配置 adb环境 超详细 (持续更新中)
  • SQL注入安全漏洞详解
  • 数据结构与算法教程,数据结构C语言版教程!(第一部分、数据结构快速入门,数据结构基础详解)四
  • mac安装k8s环境