RocketMQ原理篇

news/2025/1/11 5:45:34/

文章目录

  • broker与NameServer
  • MessageQueue与Topic的关系
  • 生产者、消费者写入读取 消息
  • CommitLog
  • 生产者
  • 消费者组

broker与NameServer

基于 Dledger 实现 RocketMQ 高可用自动切换
在这里插入图片描述

broker 会每隔 30 秒向 NameServer 发送一个的心跳 ,NameServer 收到一个心跳
更新对应 broker 的最近一次心跳事件,然后 NamServer 会每隔十秒运行一个任
务,去检查一下各个 broker 的最近一次心跳的时间,如果超过 120s 没有收到相应
broker 的心跳,则判定对应的 broker 已经挂掉

「RocketMQ 自身的 Master-Slave 模式主采取的是 Slave 主动从 Master 拉取消息。

MessageQueue与Topic的关系

MessageQueue是 Topic的数据分配机制,创建Topic的时候 需要指定关键的MessageQueue

生产者、消费者 从NameServer获取的信息:

「一个 Topic 有几个 MessageQueue,哪些 MessageQueue 在哪台Broker 机器上,通过对应的规则写入对应的 MessageQueue
在每个 Broker 机器上都存储一些 MessageQueue。通过这个方法可以实现分布式存储。

生产者、消费者写入读取 消息

发送消息时均匀写入到MessageQueue
生产者在写入消息时,一般写入到 Master
消费者在拉取消息时,可能从 Master 拉取,也可能从 Slave 拉取

「根据Master 的负载情况和 Slave 的同步情况,」 由 Master 给出建议

  • Master 负载过高,建议 下次从 Slave 获取消息
  • Slave 未同步完全,建议下次从 Master 获取消息

CommitLog

在这里插入图片描述

生产者发送一条消息到broker,broker 顺序写入PageCache,然后 由OS的一个线程异步刷盘到磁盘上的CommitLog文件
然后在ConsumerQueue中写入一条消息,写入的消息内容是 消息在CommitLog中的物理offset偏移量 (这条消息的地址)

写入速度接近内存的原因:「磁盘文件顺序写+OS PageCache 写入+OS 异步刷盘的策略」

  • CommitLog 限定1G,预先申请好

生产者

Producer 的「自动容错机制开关:sendLatencyFaultEnable

打开了这个开关,那么他会有一个自动容错机制,比如如果某次访问一个Broker发现网络延迟有500ms,然后还无法访问,那么
就会自动回避访问这个Broker一段时间,比如接下来3000ms内,就不会访问这个Broker了

消费者组

不同的系统 应该设置不同的消费组,如果不同的消费组订阅了同一个Topic,对Topic里的一条消息,每个消费组都会获取到这条消息

一个 Consumer 机 器 可 以 消 费 处 理 多 个 MessageQueue
一个MessageQueue 只能被一个相同 ConsumerGroup 中的同一个 Consumer 消费。(也就是 这条消息 只能被一个机器消费)


http://www.ppmy.cn/news/7278.html

相关文章

元素偏移量 offset、元素可视区 client和元素滚动 scroll

1、元素偏移量 offset 系列 1.1、offset 概述 offset 翻译过来就是偏移量, 我们使用 offset系列相关属性可以动态的得到该元素的位置(偏移)、大小等。 获得元素距离带有定位父元素的位置获得元素自身的大小(宽度高度&#xff09…

SegeX MemDC:实用型双缓冲内存DC (内存DC 封装MemDC)(附免费源代码)

----哆啦刘小洋 原创,转载需说明出处 2022-12-28 SegeX MemDC1 简介2 基础双缓存技术2.1 MFC绘图机制2.1.1 Window绘图消息2.1.2 背景刷新与屏幕闪烁2.2 双缓存技术消除屏幕闪烁2.3 封装3 更加实用的扩充1 简介 在VC中用MFC绘制图像时,为避免屏幕闪烁&a…

【Qt】QtCreator远程部署、调试程序

1、添加远程设备 1)QtCreator 工具–> 选项 --> 设备 --> 添加 2)设备设置向导选择–> Generic Linux Device --> 开启向导 3)填写“标识配置的名称”(随便写)、设备IP、用户名 --> 下一步 4)选择配对秘密文件,第一次配对,可以不填写,点击“下一…

Shell程序编写猜数字的小游戏

文章目录 目录 文章目录 前言 一、设计思路 二、代码编写 三、效果图 总结 前言 在学习Linux课程中学习了一点简单的shell语法,实现了一个猜数字功能的程序。感兴趣的可以看完后自己手动编写玩玩~这个小游戏的编写也是把基础的shell语法基本上都用到了&#…

学习HTTP协议,这一篇就够啦 ~~

HTTP协议一、什么是HTTP1.1 应用层协议1.2 HTTP1.3 HTTP协议的工作过程二、HTTP协议格式2.1 Fiddler抓包工具2.2 协议格式三、HTTP请求 (Request)3.1 认识 "方法" (method)3.1.1 GET 方法3.1.2 POST 方法3.1.3 GET和POST比较3.1.4 其他方法3.2 认识URL3.2.1 URL基本格…

【电商】电商后台---价税管理

文章对电商后台系统中的价税管理进行了系统的介绍,希望通过此文能够加深你对电商系统的认识。 前面介绍了商品管理部分,从商品的属性、分类到商品资质、商品图片都做了说明,在梳理的过程中越发的感觉到每部分细节才是关键。但实话实说通过前几…

C#,图像二值化(05)——全局阈值的联高自适应算法及其源代码

阈值的选择当然希望智能、简单一些。应该能应付一般的图片。 What is Binarization? Binarization is the process of transforming data features of any entity into vectors of binary numbers to make classifier algorithms more efficient. In a simple example, trans…

工作两年半,终于学会了Jenkins部署Maven项目

上期我们讲了Linux部署Jenkins Linux安装Jenkins(Java11最新版) 这期我们来讲的是使用Jenkins部署一个maven项目 文章目录👮所需要的环境(必须要有,否则不能进行下一步)🙋第一步,安装…