码迷,mamicode.com
首页 > 其他好文 > 详细

RocketMQ 源码分析(三) —— 高可用

时间:2018-06-05 00:48:46      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:mysql   3.2   fse   iso   body   消费   集群   inter   分享图片   

技术分享图片

  1. 概述
    本文主要解析 Namesrv、Broker 如何实现高可用,Producer、Consumer 怎么与它们通信保证高可用。

  2. Namesrv 高可用
    启动多个 Namesrv 实现高可用。
    相较于 Zookeeper、Consul、Etcd 等,Namesrv 是一个超轻量级的注册中心,提供命名服务。

2.1 Broker 注册到 Namesrv
?? 多个 Namesrv 之间,没有任何关系(不存在类似 Zookeeper 的 Leader/Follower 等角色),不进行通信与数据同步。通过 Broker 循环注册多个 Namesrv。

···
1: // ??????【BrokerOuterAPI.java】
2: public RegisterBrokerResult registerBrokerAll(
3: final String clusterName,
4: final String brokerAddr,
5: final String brokerName,
6: final long brokerId,
7: final String haServerAddr,
8: final TopicConfigSerializeWrapper topicConfigWrapper,
9: final List

···

2.2 Producer、Consumer 访问 Namesrv

···
1: // ??????【NettyRemotingClient.java】
2: private Channel getAndCreateNameserverChannel() throws InterruptedException {
3: // 返回已选择、可连接Namesrv
4: String addr = this.namesrvAddrChoosed.get();
5: if (addr != null) {
6: ChannelWrapper cw = this.channelTables.get(addr);
7: if (cw != null && cw.isOK()) {
8: return cw.getChannel();
9: }
10: }
11: //
12: final List

  1. Broker 高可用
    启动多个 Broker分组 形成 集群 实现高可用。
    Broker分组 = Master节点x1 + Slave节点xN。
    类似 MySQL,Master节点 提供读写服务,Slave节点 只提供读服务。

3.2 Broker 主从
每个分组,Master节点 不断发送新的 CommitLog 给 Slave节点。 Slave节点 不断上报本地的 CommitLog 已经同步到的位置给 Master节点。
Broker分组 与 Broker分组 之间没有任何关系,不进行通信与数据同步。
消费进度 目前不支持 Master/Slave 同步。
集群内,Master节点 有两种类型:Master_SYNC、Master_ASYNC:前者在 Producer 发送消息时,等待 Slave节点 存储完毕后再返回发送结果,而后者不需要等待。

3.1.1 配置
目前官方提供三套配置:

2m-2s-async
brokerClusterName brokerName brokerRole brokerId
DefaultCluster broker-a ASYNC_MASTER 0
DefaultCluster broker-a SLAVE 1
DefaultCluster broker-b ASYNC_MASTER 0
DefaultCluster broker-b SLAVE 1
2m-2s-sync
brokerClusterName brokerName brokerRole brokerId
DefaultCluster broker-a SYNC_MASTER 0
DefaultCluster broker-a SLAVE 1
DefaultCluster broker-b SYNC_MASTER 0
DefaultCluster broker-b SLAVE 1
2m-noslave
brokerClusterName brokerName brokerRole brokerId
DefaultCluster broker-a ASYNC_MASTER 0
DefaultCluster broker-b ASYNC_MASTER 0

技术分享图片

3.1.3 通信协议
Master节点 与 Slave节点 通信协议很简单,只有如下两条。

对象 用途 第几位 字段 数据类型 字节数 说明
Slave=>Master 上报CommitLog已经同步到的物理位置
0 maxPhyOffset Long 8 CommitLog最大物理位置
Master=>Slave 传输新的 CommitLog 数据
0 fromPhyOffset Long 8 CommitLog开始物理位置
1 size Int 4 传输CommitLog数据长度
2 body Bytes size 传输CommitLog数据

技术分享图片

转自:http://www.iocoder.cn/RocketMQ/high-availability/

RocketMQ 源码分析(三) —— 高可用

标签:mysql   3.2   fse   iso   body   消费   集群   inter   分享图片   

原文地址:https://www.cnblogs.com/jiangjun-x/p/9136532.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!