
RocketMQ
文章平均质量分 94
本专栏会分享RocketMQ相关知识和源码
林师傅~
点个关注再走吧
展开
-
【RocketMQ | 源码分析】消息存储文件的加载与恢复机制
前面文章我们介绍了Broker是如何将消息全量存储到CommitLog文件中,并异步生成dispatchRequest任务更新ConsumeQueue,IndexFile的过程以及ConsumeQueue和IndexFile的文件结构。由于是异步转发消息,就可能出现消息成功存储到CommitLog文件,转发请求任务执行失败,Broker宕机了,此时CommitLog和Index消息并未处理完,导致CommitLog与ConsumeQueue和IndexFile文件中的数据不一致。原创 2023-05-05 08:45:35 · 232 阅读 · 0 评论 -
【RocketMQ | 源码分析】ConsumeQueue与IndexFile更新
前面我们介绍了消息是如何存储的,消息是如何刷盘的,讲的都是CommitLog是如何存储和刷盘的。虽然CommitLog顺序存储着所有消息,但是CommitLog中的消息并没有区分topic、keys等,如果需要消费某个topic的消息或者查找某一条消息只能遍历CommitLog文件去查找,性能相当低下,因此有了ConsumeLog和IndexFile两个文件类型,这两个文件的作用主要是提升消息消费和查询的性能。原创 2023-05-01 21:28:48 · 281 阅读 · 0 评论 -
【RocketMQ | 源码分析】Broker消息是如何刷盘的? (上)
我们在学习RocketMQ的时候,我们知道RocketMQ的刷盘策略有两个刷盘策略同步刷盘同步刷盘即Broker消息已经被持久化到硬盘后才会向客户端返回成功。同步刷盘的优点是能保证消息不丢失,但是这是以牺牲写入性能为代价的。异步刷盘异步刷盘是指Broker将信息存储到pagecache后就立即向客户端返回成功,然后会有一个异步线程定时将内存中的数据写入磁盘,默认时间间隔为500ms。Broker中的刷盘策略是通过Broker配置文件中进行配置,可以配置(异步刷盘)和SYNC_FLUSH。原创 2023-04-23 08:46:18 · 393 阅读 · 0 评论 -
【RocketMQ | 源码分析】Broker是如何保存消息的
前面我们介绍了RocketMQ是如何接收消息的,下面我们来介绍Broker是如何保存消息的。CommitLog是消息和消息数据存储的主体,CommitLog存储的文件目录在中,它其实是一个目录,消息并不是直接存储在CommitLog中,而是存储在由20位数字构成的文件中。消息在commitLog中存储的格式如下所示totalSize消息总长度,4字节magicCode魔数,4字节,固定值十六进制是0xdaa320a7,10进制是-875286124bodyCRC消息体crc校验码,4字节。原创 2023-04-12 08:44:40 · 311 阅读 · 0 评论 -
【RocketMQ | 源码分析】Broker接收消息过程都做了什么
Broker的作用主要负责消息的存储、投递和查询以及服务高可用保证。Broker是RocketMQ中最重要也是最复杂的组件,本篇文章是Broker源码分析的第一篇,通过本篇文章,可以对Broker有一个初步、整体的认识。文章中的代码几乎逐行加了注释,尽可能让把相关的类都介绍了一遍,方便后续深入学习Broker其他知识。简介内容截取自官网在 Master-Slave 架构中,Broker 分为 Master 与 Slave。一个Master可以对应多个Slave,但是一个Slave只能对应一个Master。原创 2023-04-11 08:52:26 · 220 阅读 · 0 评论 -
【RocketMQ | 源码分析】Broker启动过程
Broker的作用主要负责消息的存储、投递和查询以及服务高可用保证。Broker是RocketMQ中最重要也是最复杂的组件,本篇文章是Broker源码分析的第一篇,通过本篇文章,可以对Broker有一个初步、整体的认识。文章中的代码几乎逐行加了注释,尽可能让把相关的类都介绍了一遍,方便后续深入学习Broker其他知识。简介内容截取自官网在 Master-Slave 架构中,Broker 分为 Master 与 Slave。一个Master可以对应多个Slave,但是一个Slave只能对应一个Master。原创 2023-04-10 09:31:23 · 655 阅读 · 0 评论 -
【RocketMQ | 源码分析】RocketMQ本地调试环境搭建
环境搭建是源码分析的第一步,俗话说磨刀不误砍柴工,我们必须要先把本地环境搭建好,才方便后续我们分析和debug源码。我们主要分析RocketMQ中最重要的4大组件namesrvbrokerproducerconsumer。通过idea打开RocketMQ工程有如下包我们需要重点关注的包有broker源码存放在rocketmq-broker包中producer和consumer的源码存放在rocketmq-client中。原创 2023-04-07 08:54:27 · 371 阅读 · 0 评论 -
【RocketMQ | 源码分析】Broker是如何将路由信息注册到namesrv
Namesrv主要作用就是为消息生产者和消息消费者提供关于topic的路由信息,Namesrv就需要具备路由基础信息管理,Broker节点管理等功能。Namesrv本身是一个无状态的节点,本文我们通过一起来看Broker是如何将信息注册到Namesrv上。路由元信息保存在,它存储的信息见下面信息。原创 2023-04-06 08:50:07 · 344 阅读 · 0 评论 -
【RocketMQ|源码分析】namesrv启动&停止过程都做了什么
namesrv在是RocketMQ中一个十分重要的组件,它相当于是Kafka中的zookeeper,Spring Cloud Alibaba中的nacos。它的主要作用是为消息生产者和消息消费者提供关于topic的路由信息。namesrv具有存储路由信息,并且能够管理broker节点(路由注册,路由删除等功能)。原创 2023-03-28 22:33:07 · 529 阅读 · 0 评论 -
【RocketMQ|源码分析】Producer中延迟故障机制
RocketMQ中的延迟故障机制是为了帮助Producer能够通过消息发送延迟或者消息发送结果主动感知Broker忙碌或者故障,消息发送延迟或者消息发送失败时可以将Broker排除在选择列表之外。这个机制默认是不开启的,如果需要开启这个机制需要在创建Producer时主动开启。原创 2023-03-27 07:00:00 · 389 阅读 · 0 评论 -
【RocketMQ|源码分析】Producer是如何选择路由队列的?
消息发送到RocketMQ服务器涉及到下面几个概念生产者生产者是消息生成的实体主题(Topic)Topic是消息传输和存储的顶层容器,通常用于标识同意类型的业务逻辑消息,它是由多个队列组成,消息的存储和水平扩展是通过Topic内队列来实现的。队列(MessageQueue)队列是消息存储和传输的实际单元容器,它相当于Kakfa中的分区(partition)。MessageQueue代码如下所示,它主要包含topic,brokername,queueId三个属性。原创 2023-03-26 09:00:00 · 395 阅读 · 0 评论 -
【RocketMQ|源码分析】Producer是如何发送消息的?
Producer是RocketMQ中的消息发送者,本篇文章将介绍Producer是如何将消息发送到broker中。先看下官方文档中的例子,消息推送总共包括4个步骤创建Producer对象,并设置namesrv启动producer推送消息关闭producer// 1. 创建producer DefaultMQProducer producer = new DefaultMQProducer(PRODUCER_GROUP);原创 2023-03-25 10:40:15 · 294 阅读 · 0 评论