RocketMQ之Broker

一、Broker 介绍

Broker 是 RocketMQ 的核心,大部分 "重量级" 工作都是由 Broker 完成的,如:
    * 接收 Producer 发送的消息
    * 处理 Consumer的消费消息请求
    * 消息的持久化存储
    * 消息的 HA 机制
    * 服务器过滤功能
    ......

二、消息的存储结构

RocketMQ 的消息存储由 ConsumeQueueCommitLog 配合完成。

2.1 ConsumeQueue

* ConsumeQueue 是消息的逻辑队列,类似数据库的索引文件,存储着指向物理存储的地址。每个 Topic 下的每个 MessageQueue 都有一个对应的 ConsumeQueue 文件。 

* 文件所在路径: ${$storeRoot}consumequeue${topicName}${queueId}${fileName}。

2.2 CommitLog

* CommitLog 是物理存储文件,每个 Broker 上的 CommitLog 被本机器所有的 ConsumeQueue 共享。
    
* 文件所在路径:${user.homt}store${commitlog}${fileName}。    

2.3 存储顺序

RocketMQ 通过一些机制来保证,尽量向 CommitLog 中顺序写入,但是可以随机读取。

三、高可用机制

Broker 集群通过 MasterSlave 的配合达到高可用性,通过在 Broker 的配置文件中设置参数 brokerId 来区分是 Master 还是 Slave

* brokerId 等于 0 表示这个 Broker 是 Master;
* brokerId 大于 0 表示这个 Broker 是 Slave;

Master 支持读和写操作,Slave 只支持读操作。

四、同步刷盘与异步刷盘

4.1 什么叫做刷盘?

* RocketMQ 消息存储方式为内存+磁盘存储;
* 刷盘是指将内存的数据写入到磁盘中的操作;
* 刷盘分为同步刷盘和异步刷盘    

4.2 异步刷盘

当执行消息写入操作时,当消息写入到内存中时,就返回写成功状态。当内存中的消息量积累到一定量时,统一触发写磁盘动作。

4.3 同步刷盘

当执行消息写入操作时,同步写入内存和磁盘中后才返回写成功状态。

4.4 刷盘方式配置

通过 Broker配置文件中的 fulshDiskType 参数配置:
    * SYNC_FLUSH:同步刷盘
    * ASYNC_FLUSH:异步刷盘    

建议使用 异步刷盘 形式。

五、同步复制和异步复制

5.1 什么叫做复制?

Broker 集群有 Master 和 Slave 两种角色,消息需要从 Master 复制到 Slave 上; 

5.2 异步复制

当执行消息写入操作时,只要 Master写成功即可反馈给客户端成功状态

5.3 同步复制

当执行消息写入操作时, Master和 Slave 均写成功才反馈给客户端成功状态

5.4 复制方式配置

通过 Broker配置文件中的 brokerRole 参数配置:
    * ASYNC_MASTER:异步复制
    * SYNC_MASTER:同步复制
    * SLAVE

建议使用 SYNC_MASTER 形式。

原文地址:https://www.cnblogs.com/markLogZhu/p/12586133.html