女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

聊聊RocketMQ的主從復(fù)制

OSC開(kāi)源社區(qū) ? 來(lái)源:勇哥java實(shí)戰(zhàn)分享 ? 2023-07-04 09:42 ? 次閱讀

1 同步與異步

在 RocketMQ 的集群模式中,Broker 分為 Master 與 Slave,一個(gè) Master 可以對(duì)應(yīng)多個(gè) Slave,但是一個(gè) Slave 只能對(duì)應(yīng)一個(gè) Master。

每個(gè) Broker 與 Name Server 集群中的所有節(jié)點(diǎn)建立長(zhǎng)連接,定時(shí)注冊(cè) Topic 信息到所有 Name Server。

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

Master 節(jié)點(diǎn)負(fù)責(zé)接收客戶端的寫入請(qǐng)求,并將消息持久化到磁盤上。而 Slave 節(jié)點(diǎn)則負(fù)責(zé)從 Master 節(jié)點(diǎn)復(fù)制消息數(shù)據(jù),并保持與 Master 節(jié)點(diǎn)的同步。

1、同步復(fù)制

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

每個(gè) Master 配置一個(gè) Slave ,有多對(duì) Master-Slave ,HA 采用同步雙寫方式,即只有主備都寫成功,才向應(yīng)用返回成功。

這種模式的優(yōu)缺點(diǎn)如下:

優(yōu)點(diǎn):數(shù)據(jù)與服務(wù)都無(wú)單點(diǎn)故障,Master宕機(jī)情況下,消息無(wú)延遲,服務(wù)可用性與數(shù)據(jù)可用性都非常高;

缺點(diǎn):性能比異步復(fù)制模式略低(大約低10%左右),發(fā)送單個(gè)消息的 RT 會(huì)略高,且目前版本在主節(jié)點(diǎn)宕機(jī)后,備機(jī)不能自動(dòng)切換為主機(jī)。

2、異步復(fù)制

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

每個(gè) Master 配置一個(gè) Slave ,有多對(duì) Master-Slave ,HA 采用異步復(fù)制方式,主備有短暫消息延遲(毫秒級(jí)),這種模式的優(yōu)缺點(diǎn)如下:

優(yōu)點(diǎn):即使磁盤損壞,消息丟失的非常少,且消息實(shí)時(shí)性不會(huì)受影響,同時(shí)Master宕機(jī)后,消費(fèi)者仍然可以從Slave消費(fèi),而且此過(guò)程對(duì)應(yīng)用透明,不需要人工干預(yù),性能同多 Master 模式幾乎一樣;

缺點(diǎn):Master 宕機(jī),磁盤損壞情況下會(huì)丟失少量消息 。

復(fù)制流程分為兩個(gè)部分:元數(shù)據(jù)復(fù)制消息數(shù)據(jù)復(fù)制

主從服務(wù)器同步主題,消費(fèi)者進(jìn)度,延遲消費(fèi)進(jìn)度,消費(fèi)者配置數(shù)據(jù)

主從服務(wù)器同步消息數(shù)據(jù)

2 元數(shù)據(jù)復(fù)制

Slave Broker 定時(shí)任務(wù)每隔 10 秒會(huì)同步元數(shù)據(jù),包括主題消費(fèi)進(jìn)度延遲消費(fèi)進(jìn)度消費(fèi)者配置

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

同步主題時(shí), Slave Broker 向 Master Broker 發(fā)送 RPC 請(qǐng)求,返回?cái)?shù)據(jù)后,首先加入本地緩存里,然后持久化到本地。

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

3 消息數(shù)據(jù)復(fù)制

下圖是 Master 和 Slave 消息數(shù)據(jù)同步的流程圖。

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

1、Master 啟動(dòng)后監(jiān)聽(tīng)指定端口

Master 啟動(dòng)后創(chuàng)建 AcceptSocketService 服務(wù) , 用來(lái)創(chuàng)建客戶端到服務(wù)端的 TCP 鏈接。

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

RocketMQ 抽象了鏈接對(duì)象 HAConnection , HAConnection 會(huì)啟動(dòng)兩個(gè)線程,分別用于讀服務(wù)和寫服務(wù):

讀服務(wù):處理 Slave 發(fā)送的請(qǐng)求

寫服務(wù):用于向 Slave 傳輸數(shù)據(jù)

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

2、Slave 啟動(dòng)后,嘗試連接 Master ,建立 TCP 連接;

HAClient 是客戶端 Slave 的核心類 ,負(fù)責(zé)和 Master 創(chuàng)建連接和數(shù)據(jù)交互。

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

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

3、Slave 向 Master 匯報(bào)拉取消息偏移量;

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

上報(bào)進(jìn)度的數(shù)據(jù)格式是一個(gè) Long 類型的 Offset , 8個(gè)字節(jié) , 非常簡(jiǎn)潔 。

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

發(fā)送到 Socket 緩沖區(qū)后 , 修改最后一次的寫時(shí)間 lastWriteTimestamp 。

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

當(dāng) Slave 上報(bào)數(shù)據(jù)到 Master 時(shí),觸發(fā) SelectionKey.OP_READ 事件,Master 將請(qǐng)求交由 ReadSocketService 服務(wù)處理:

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

當(dāng) Slave Broker 傳遞了自身 commitlog 的 maxPhyOffset 時(shí),Master 會(huì)馬上中斷 selector.select(1000) ,執(zhí)行 processReadEvent 方法。

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

processReadEvent 方法的核心邏輯是設(shè)置 Slave 的當(dāng)前進(jìn)度 offset ,然后通知復(fù)制線程當(dāng)前的復(fù)制進(jìn)度。

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

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

5、Slave 接收到數(shù)據(jù),將消息數(shù)據(jù) append 到消息文件 commitlog 里 。

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

首先 HAClient 類中調(diào)用 dispatchReadRequest 方法 , 解析出消息數(shù)據(jù) ;

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

然后將消息數(shù)據(jù) append 到本地的消息存儲(chǔ)。

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

4 同步的實(shí)現(xiàn)

從數(shù)據(jù)復(fù)制流程圖,我們發(fā)覺(jué)數(shù)據(jù)復(fù)制本身就是一個(gè)異步執(zhí)行的,但是同步是如何實(shí)現(xiàn)的呢?

Master Broker 接收到寫入消息的請(qǐng)求后 ,調(diào)用 Commitlog 的 aysncPutMessage 方法寫入消息。

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

這段代碼中,當(dāng) commitLog 執(zhí)行完 appendMessage 后, 需要執(zhí)行刷盤任務(wù)同步復(fù)制兩個(gè)任務(wù)。

但這兩個(gè)任務(wù)并不是同步執(zhí)行,而是異步的方式,使用了 CompletableFuture 這個(gè)異步神器

當(dāng) HAConnection 讀服務(wù)接收到 Slave 的進(jìn)度反饋,發(fā)現(xiàn)消息數(shù)據(jù)復(fù)制成功,則喚醒 future 。

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

最后 Broker 組裝響應(yīng)命令 ,并將響應(yīng)命令返回給客戶端。

5 總結(jié)

RocketMQ 主從復(fù)制的實(shí)現(xiàn)思路非常簡(jiǎn)潔,Slave 啟動(dòng)一個(gè)線程,不斷從 Master 拉取 Commit Log 中的數(shù)據(jù),然后在異步 build 出 Consume Queue 數(shù)據(jù)結(jié)構(gòu)。

核心要點(diǎn)如下:

1、主從復(fù)制包含元數(shù)據(jù)復(fù)制和消息數(shù)據(jù)復(fù)制兩個(gè)部分;

2、元數(shù)據(jù)復(fù)制

Slave Broker 定時(shí)任務(wù)每隔 10 秒向 Master Broker 發(fā)送 RPC 請(qǐng)求,將元數(shù)據(jù)同步到緩存后,然后持久化到磁盤里;

3、消息數(shù)據(jù)復(fù)制

Master 啟動(dòng)監(jiān)聽(tīng)指定端口

Slave 啟動(dòng) HaClient 服務(wù),和 Master 創(chuàng)建 TCP 鏈接

Slave 向 Master 上報(bào)存儲(chǔ)進(jìn)度

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

Slave 接收到數(shù)據(jù)后,將消息數(shù)據(jù) append 到本地的消息存儲(chǔ)。

4、同步的實(shí)現(xiàn)

當(dāng) commitLog 執(zhí)行完 appendMessage 后, 需要執(zhí)行刷盤任務(wù)同步復(fù)制兩個(gè)任務(wù),這里用到了 CompletableFuture 這個(gè)異步神器。

當(dāng) HAConnection 讀服務(wù)接收到 Slave 的進(jìn)度反饋,發(fā)現(xiàn)消息數(shù)據(jù)復(fù)制成功,則喚醒 future 。最后 Broker 組裝響應(yīng)命令 ,并將響應(yīng)命令返回給客戶端 。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • RPC
    RPC
    +關(guān)注

    關(guān)注

    0

    文章

    111

    瀏覽量

    11804
  • TCP協(xié)議
    +關(guān)注

    關(guān)注

    1

    文章

    101

    瀏覽量

    12347
  • TCP通信
    +關(guān)注

    關(guān)注

    0

    文章

    146

    瀏覽量

    4465

原文標(biāo)題:聊聊 RocketMQ 主從復(fù)制

文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Redis主從復(fù)制的作用和步驟

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

    基于二進(jìn)制安裝MySQL的主從復(fù)制

    二進(jìn)制安裝MySQL實(shí)現(xiàn)主從復(fù)制
    發(fā)表于 03-10 09:43

    mysql的主從復(fù)制

    mysql 主從復(fù)制
    發(fā)表于 04-28 14:30

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

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

    詳解Redis主從復(fù)制和哨兵機(jī)制

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

    利用MySQL進(jìn)行一主一從的主從復(fù)制

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

    MySQL主從復(fù)制原理詳解

    簡(jiǎn)單講,MySQL主從復(fù)制就是數(shù)據(jù)寫入一臺(tái)服務(wù)器(主服務(wù)器)后,同時(shí)還會(huì)額外寫入另外的服務(wù)器(從服務(wù)器)。也就是說(shuō)數(shù)據(jù)會(huì)寫多份,這樣做的目的主要有兩個(gè):
    的頭像 發(fā)表于 02-06 10:27 ?1264次閱讀

    一個(gè)操作把MySQL主從復(fù)制整崩了

    最近公司某項(xiàng)目上反饋mysql主從復(fù)制失敗,被運(yùn)維部門記了一次大過(guò),影響到了項(xiàng)目的驗(yàn)收推進(jìn),那么究竟是什么原因?qū)е碌哪兀慷?b class='flag-5'>主從復(fù)制的原理又是什么呢?本文就對(duì)排查分析的過(guò)程做一個(gè)記錄。
    的頭像 發(fā)表于 05-11 11:14 ?701次閱讀
    一個(gè)操作把MySQL<b class='flag-5'>主從復(fù)制</b>整崩了

    什么是Redis主從復(fù)制

    Redis主從復(fù)制 來(lái)自靈魂的拷問(wèn):什么是Redis主從復(fù)制? 簡(jiǎn)言之就是: 主對(duì)外從對(duì)內(nèi),主可寫從不可寫 主掛了,從不可為主 看下面的圖加深下理解: 對(duì),你沒(méi)看錯(cuò),Redis主從復(fù)制沒(méi)有動(dòng)態(tài)選舉
    的頭像 發(fā)表于 10-09 15:09 ?589次閱讀
    什么是Redis<b class='flag-5'>主從復(fù)制</b>

    mysql主從復(fù)制三種模式

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

    mysql如何實(shí)現(xiàn)主從復(fù)制的具體流程

    主從復(fù)制是MySQL數(shù)據(jù)庫(kù)中常用的數(shù)據(jù)復(fù)制技術(shù)之一,它的主要目的是將一個(gè)數(shù)據(jù)庫(kù)服務(wù)器上的數(shù)據(jù)復(fù)制到其他服務(wù)器上,以實(shí)現(xiàn)數(shù)據(jù)的備份、高可用和分布式部署。下面將詳細(xì)介紹MySQL主從復(fù)制
    的頭像 發(fā)表于 11-16 14:10 ?966次閱讀

    mysql主從復(fù)制主要有幾種模式

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

    mysql主從復(fù)制的原理

    MySQL主從復(fù)制是一種數(shù)據(jù)庫(kù)復(fù)制技術(shù),它允許將一個(gè)MySQL數(shù)據(jù)庫(kù)的更新操作自動(dòng)復(fù)制到其他MySQL數(shù)據(jù)庫(kù)上的過(guò)程。主要通過(guò)MySQL的binlog(二進(jìn)制日志)和relay log(中繼日志)來(lái)
    的頭像 發(fā)表于 11-16 14:18 ?666次閱讀

    mysql主從復(fù)制 混合類型的復(fù)制

    MySQL主從復(fù)制是一種常用的數(shù)據(jù)復(fù)制技術(shù),可以實(shí)現(xiàn)數(shù)據(jù)從一個(gè)MySQL服務(wù)器(主服務(wù)器)復(fù)制到另一個(gè)MySQL服務(wù)器(從服務(wù)器)。在主從復(fù)制中,混合類型的
    的頭像 發(fā)表于 11-16 14:20 ?754次閱讀

    配置MySQL主從復(fù)制和讀寫分離

    配置MySQL主從復(fù)制和讀寫分離
    的頭像 發(fā)表于 10-23 11:44 ?754次閱讀
    配置MySQL<b class='flag-5'>主從復(fù)制</b>和讀寫分離