色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

聊聊RocketMQ的主從復制

OSC開源社區 ? 來源:勇哥java實戰分享 ? 2023-07-04 09:42 ? 次閱讀

1 同步與異步

在 RocketMQ 的集群模式中,Broker 分為 Master 與 Slave,一個 Master 可以對應多個 Slave,但是一個 Slave 只能對應一個 Master。

每個 Broker 與 Name Server 集群中的所有節點建立長連接,定時注冊 Topic 信息到所有 Name Server。

53cfb9da-198f-11ee-962d-dac502259ad0.jpg

Master 節點負責接收客戶端的寫入請求,并將消息持久化到磁盤上。而 Slave 節點則負責從 Master 節點復制消息數據,并保持與 Master 節點的同步。

1、同步復制

53f1edfc-198f-11ee-962d-dac502259ad0.jpg

每個 Master 配置一個 Slave ,有多對 Master-Slave ,HA 采用同步雙寫方式,即只有主備都寫成功,才向應用返回成功。

這種模式的優缺點如下:

優點:數據與服務都無單點故障,Master宕機情況下,消息無延遲,服務可用性與數據可用性都非常高;

缺點:性能比異步復制模式略低(大約低10%左右),發送單個消息的 RT 會略高,且目前版本在主節點宕機后,備機不能自動切換為主機。

2、異步復制

5404f672-198f-11ee-962d-dac502259ad0.jpg

每個 Master 配置一個 Slave ,有多對 Master-Slave ,HA 采用異步復制方式,主備有短暫消息延遲(毫秒級),這種模式的優缺點如下:

優點:即使磁盤損壞,消息丟失的非常少,且消息實時性不會受影響,同時Master宕機后,消費者仍然可以從Slave消費,而且此過程對應用透明,不需要人工干預,性能同多 Master 模式幾乎一樣;

缺點:Master 宕機,磁盤損壞情況下會丟失少量消息 。

復制流程分為兩個部分:元數據復制消息數據復制

主從服務器同步主題,消費者進度,延遲消費進度,消費者配置數據

主從服務器同步消息數據

2 元數據復制

Slave Broker 定時任務每隔 10 秒會同步元數據,包括主題消費進度延遲消費進度消費者配置

541b28ca-198f-11ee-962d-dac502259ad0.jpg

同步主題時, Slave Broker 向 Master Broker 發送 RPC 請求,返回數據后,首先加入本地緩存里,然后持久化到本地。

54308472-198f-11ee-962d-dac502259ad0.jpg

3 消息數據復制

下圖是 Master 和 Slave 消息數據同步的流程圖。

544f7b66-198f-11ee-962d-dac502259ad0.jpg

1、Master 啟動后監聽指定端口

Master 啟動后創建 AcceptSocketService 服務 , 用來創建客戶端到服務端的 TCP 鏈接。

5470ee9a-198f-11ee-962d-dac502259ad0.jpg

RocketMQ 抽象了鏈接對象 HAConnection , HAConnection 會啟動兩個線程,分別用于讀服務和寫服務:

讀服務:處理 Slave 發送的請求

寫服務:用于向 Slave 傳輸數據

5492f058-198f-11ee-962d-dac502259ad0.png

2、Slave 啟動后,嘗試連接 Master ,建立 TCP 連接;

HAClient 是客戶端 Slave 的核心類 ,負責和 Master 創建連接和數據交互。

54b28698-198f-11ee-962d-dac502259ad0.jpg

客戶端在啟動后,首先嘗試連接 Master , 查詢當前消息存儲中最大的物理偏移量 ,并存儲在變量 currentReportedOffset 里。

3、Slave 向 Master 匯報拉取消息偏移量;

54d59994-198f-11ee-962d-dac502259ad0.jpg

上報進度的數據格式是一個 Long 類型的 Offset , 8個字節 , 非常簡潔 。

54f2d554-198f-11ee-962d-dac502259ad0.jpg

發送到 Socket 緩沖區后 , 修改最后一次的寫時間 lastWriteTimestamp 。

4、Master 解析請求偏移量,從消息文件中檢索該偏移量后的所有消息;

當 Slave 上報數據到 Master 時,觸發 SelectionKey.OP_READ 事件,Master 將請求交由 ReadSocketService 服務處理:

550fb840-198f-11ee-962d-dac502259ad0.jpg

當 Slave Broker 傳遞了自身 commitlog 的 maxPhyOffset 時,Master 會馬上中斷 selector.select(1000) ,執行 processReadEvent 方法。

552c8cc2-198f-11ee-962d-dac502259ad0.jpg

processReadEvent 方法的核心邏輯是設置 Slave 的當前進度 offset ,然后通知復制線程當前的復制進度。

寫服務 WriteSocketService 從消息文件中檢索該偏移量后的所有消息(傳輸批次數據大小限制),并將消息數據發送給 Slave。

554f932a-198f-11ee-962d-dac502259ad0.jpg

5、Slave 接收到數據,將消息數據 append 到消息文件 commitlog 里 。

5588c88e-198f-11ee-962d-dac502259ad0.jpg

首先 HAClient 類中調用 dispatchReadRequest 方法 , 解析出消息數據 ;

55b7de3a-198f-11ee-962d-dac502259ad0.jpg

然后將消息數據 append 到本地的消息存儲。

55d048c6-198f-11ee-962d-dac502259ad0.jpg

4 同步的實現

從數據復制流程圖,我們發覺數據復制本身就是一個異步執行的,但是同步是如何實現的呢?

Master Broker 接收到寫入消息的請求后 ,調用 Commitlog 的 aysncPutMessage 方法寫入消息。

55fbe33c-198f-11ee-962d-dac502259ad0.jpg

這段代碼中,當 commitLog 執行完 appendMessage 后, 需要執行刷盤任務同步復制兩個任務。

但這兩個任務并不是同步執行,而是異步的方式,使用了 CompletableFuture 這個異步神器

當 HAConnection 讀服務接收到 Slave 的進度反饋,發現消息數據復制成功,則喚醒 future 。

5622ae4a-198f-11ee-962d-dac502259ad0.jpg

最后 Broker 組裝響應命令 ,并將響應命令返回給客戶端。

5 總結

RocketMQ 主從復制的實現思路非常簡潔,Slave 啟動一個線程,不斷從 Master 拉取 Commit Log 中的數據,然后在異步 build 出 Consume Queue 數據結構。

核心要點如下:

1、主從復制包含元數據復制和消息數據復制兩個部分;

2、元數據復制

Slave Broker 定時任務每隔 10 秒向 Master Broker 發送 RPC 請求,將元數據同步到緩存后,然后持久化到磁盤里;

3、消息數據復制

Master 啟動監聽指定端口

Slave 啟動 HaClient 服務,和 Master 創建 TCP 鏈接

Slave 向 Master 上報存儲進度

Master 接收進度,消息文件中檢索該偏移量后的所有消息,并傳輸給 Slave

Slave 接收到數據后,將消息數據 append 到本地的消息存儲。

4、同步的實現

當 commitLog 執行完 appendMessage 后, 需要執行刷盤任務同步復制兩個任務,這里用到了 CompletableFuture 這個異步神器。

當 HAConnection 讀服務接收到 Slave 的進度反饋,發現消息數據復制成功,則喚醒 future 。最后 Broker 組裝響應命令 ,并將響應命令返回給客戶端 。






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RPC
    RPC
    +關注

    關注

    0

    文章

    111

    瀏覽量

    11529
  • TCP協議
    +關注

    關注

    1

    文章

    91

    瀏覽量

    12070
  • TCP通信
    +關注

    關注

    0

    文章

    146

    瀏覽量

    4221

原文標題:聊聊 RocketMQ 主從復制

文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Redis主從復制的作用和步驟

    Redis青銅修煉手冊(五) --- Redis的主從復制
    發表于 06-27 07:20

    基于二進制安裝MySQL的主從復制

    二進制安裝MySQL實現主從復制
    發表于 03-10 09:43

    mysql的主從復制

    mysql 主從復制
    發表于 04-28 14:30

    基于mycat的Mysql主從復制讀寫分離全攻略

    基于mycat的Mysql主從復制讀寫分離全攻略
    發表于 09-08 10:10 ?4次下載
    基于mycat的Mysql<b class='flag-5'>主從復制</b>讀寫分離全攻略

    詳解Redis主從復制和哨兵機制

    Redis主從復制主要有兩個角色,主機(master)對外提供讀寫功能,從機(slave)對外只提供讀功能,主機定期把數據同步到從機上保證數據一致性。
    的頭像 發表于 05-03 18:14 ?1952次閱讀
    詳解Redis<b class='flag-5'>主從復制</b>和哨兵機制

    利用MySQL進行一主一從的主從復制

    本文講述了如何使用MyBatisPlus+ShardingSphereJDBC進行讀寫分離,以及利用MySQL進行一主一從的主從復制
    的頭像 發表于 07-28 09:47 ?1031次閱讀

    MySQL主從復制原理詳解

    簡單講,MySQL主從復制就是數據寫入一臺服務器(主服務器)后,同時還會額外寫入另外的服務器(從服務器)。也就是說數據會寫多份,這樣做的目的主要有兩個:
    的頭像 發表于 02-06 10:27 ?1084次閱讀

    一個操作把MySQL主從復制整崩了

    最近公司某項目上反饋mysql主從復制失敗,被運維部門記了一次大過,影響到了項目的驗收推進,那么究竟是什么原因導致的呢?而主從復制的原理又是什么呢?本文就對排查分析的過程做一個記錄。
    的頭像 發表于 05-11 11:14 ?543次閱讀
    一個操作把MySQL<b class='flag-5'>主從復制</b>整崩了

    什么是Redis主從復制

    Redis主從復制 來自靈魂的拷問:什么是Redis主從復制? 簡言之就是: 主對外從對內,主可寫從不可寫 主掛了,從不可為主 看下面的圖加深下理解: 對,你沒看錯,Redis主從復制沒有動態選舉
    的頭像 發表于 10-09 15:09 ?415次閱讀
    什么是Redis<b class='flag-5'>主從復制</b>

    mysql主從復制三種模式

    MySQL主從復制是一種常見的數據同步方式,它可以實現將一個數據庫的更改同步到其他多個數據庫的功能。主從復制可以提高數據庫的可用性和性能,以及提供故障恢復和數據備份的支持。在MySQL中,有三種
    的頭像 發表于 11-16 14:04 ?1522次閱讀

    mysql如何實現主從復制的具體流程

    主從復制是MySQL數據庫中常用的數據復制技術之一,它的主要目的是將一個數據庫服務器上的數據復制到其他服務器上,以實現數據的備份、高可用和分布式部署。下面將詳細介紹MySQL主從復制
    的頭像 發表于 11-16 14:10 ?778次閱讀

    mysql主從復制主要有幾種模式

    MySQL主從復制是MySQL數據庫中常用的一種數據復制方式,用于實現數據的備份、負載均衡、故障恢復等目的。主從復制主要有以下幾種模式: 異步復制 異步
    的頭像 發表于 11-16 14:15 ?1162次閱讀

    mysql主從復制的原理

    MySQL主從復制是一種數據庫復制技術,它允許將一個MySQL數據庫的更新操作自動復制到其他MySQL數據庫上的過程。主要通過MySQL的binlog(二進制日志)和relay log(中繼日志)來
    的頭像 發表于 11-16 14:18 ?483次閱讀

    mysql主從復制 混合類型的復制

    MySQL主從復制是一種常用的數據復制技術,可以實現數據從一個MySQL服務器(主服務器)復制到另一個MySQL服務器(從服務器)。在主從復制中,混合類型的
    的頭像 發表于 11-16 14:20 ?550次閱讀

    配置MySQL主從復制和讀寫分離

    配置MySQL主從復制和讀寫分離
    的頭像 發表于 10-23 11:44 ?411次閱讀
    配置MySQL<b class='flag-5'>主從復制</b>和讀寫分離
    主站蜘蛛池模板: 伊人久久大香线蕉观看| 国产精品www视频免费看| 国产呦精品一区二区三区网站| 免费播放美女一级毛片| 亚洲国产欧美日韩在线一区| AV72啪啪网站| 久久久中日AB精品综合| 午夜伦午夜伦锂电影| voyeurhit农村夫妻偷拍| 九九热精品免费观看| 小小水蜜桃免费影院| 北原多香子qvod| 美女pk精子2小游戏| 亚洲人成电影网站在线观看| 国产不卡一卡2卡三卡4卡网站 | 黄色三级网站| 天天插天天舔| xxnx日本| 蜜芽一区二区国产精品| 杨幂被视频在线观看| 国产精品色午夜视频免费看| 秋霞成人午夜鲁丝一区二区三区 | 国产成在线观看免费视频| 欧美 日韩 亚洲 在线| 正在播放国产精品| 国色天香视频在线社区| 午夜福利合集1000在线| 第一怡春院| 全是肉的高h短篇列车| 99热热在线精品久久| 老师湿乎乎两半嫩| 伊人久久电影院| 狠狠色狠狠色综合曰曰| 亚色九九九全国免费视频| 国产哺乳期奶水avav| 日本无翼恶漫画大全优优漫画| 99久久亚洲| 女人把腿张开叫男人桶免费视频| 张开腿我尝尝你的草莓| 久久精品国产色蜜蜜麻豆国语版 | 成人啪啪色婷婷久色社区|