0
点赞
收藏
分享

微信扫一扫

RocketMQ 6.核心原理解析

Java架构领域 2021-09-21 阅读 86

1. 消息的存储结构


RocketMQ消息存储

2.同步刷盘与异步刷盘

RocketMQ消息存储:内存+磁盘存储,两种刷盘方式
异步刷盘





RocketMQ存储--同步刷盘和异步刷盘

3.同步复制与异步复制

  • 同一组Broker有Master-Slave角色
  • 异步复制
  • 同步复制

如果一个broker组有Master和Slave,消息需要从Master复制到Slave上,有同步和异步两种复制方式。

复制方式 描述 优点 缺点
同步 等Master和Slave均写成功后才反馈给客户端写成功状态 如果Master出故障,Slave上有全部的备份数据,容易恢复,消费者仍可以从Slave消费, 消息不丢失 增大数据写入延迟,降低系统吞吐量,性能比异步复制模式略低,大约低10%左右,发送单个Master的响应时间会略高
异步 只要Master写成功即可反馈给客户端写成功状态 系统拥有较低的延迟和较高的吞吐量. Master宕机之后,消费者仍可以从Slave消费,此过程对应用透明,不需要人工干预,性能同多个Master模式几乎一样 如果Master出了故障,有些数据因为没有被写入Slave,而丢失少量消息。

4.高可用机制

BrokerId
Master读、写,Slave只读
当Master繁忙或者不可用时,可以自动切换到Slave读取消息

5.NameServer协调者

5.1NameServer 的功能
5.2RocketMQ为什么不使用ZooKeeper
NameServer是整个集群的状态服务器
NameServer部署、相互独立
集群状态的存储结构

NameServer维护的主要信息:

    /**
     * 存储所有Topic的属性信息
     */
    private final HashMap<String/* topic */, List<QueueData>> topicQueueTable;
    /**
     *  存储BrokerName对应的属性信息
     */
    private final HashMap<String/* brokerName */, BrokerData> brokerAddrTable;
    /**
     * 存储集群的信息
     */
    private final HashMap<String/* clusterName */, Set<String/* brokerName */>> clusterAddrTable;
    /**
     * 存储Broker机器的实时状态
     */
    private final HashMap<String/* brokerAddr */, BrokerLiveInfo> brokerLiveTable;
    /**
     * 存储过滤服务器信息
     */
    private final HashMap<String/* brokerAddr */, List<String>/* Filter Server */> filterServerTable;
特别感谢:

阿神

举报

相关推荐

0 条评论