<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          騰訊宣布開源 RoP:Apache Pulsar 支持原生 RocketMQ 協(xié)議

          共 4057字,需瀏覽 9分鐘

           ·

          2021-05-24 00:50

          導(dǎo)讀

          RocketMQ 用戶可以無(wú)縫遷移到 Apache Pulsar 了。自此,Apache Pulsar 補(bǔ)齊了兼容主流消息隊(duì)列協(xié)議的能力。

          我們很高興地宣布騰訊云中間件開源 RoP!RoP 將 RocketMQ 協(xié)議處理插件引入 Pulsar broker,這樣 Pulsar 就能支持原生 RocketMQ 協(xié)議了。


          作者介紹


          冉小龍


          騰訊高級(jí)工程師,Apache Pulsar Committer,Apache BookKeeper Contributor



          什么是RoP


          什么是高可用性


          與 KoP、MoP 和 AoP 相似,RoP 是一種可插拔的協(xié)議處理插件。


          將 RoP 協(xié)議處理插件添加到現(xiàn)有 Pulsar 集群后,用戶無(wú)需修改代碼,便能將現(xiàn)有的 RocketMQ 應(yīng)用程序和服務(wù)遷移到 Pulsar,同時(shí)還能使用 Pulsar 的強(qiáng)大功能,例如:


          ?計(jì)算與存儲(chǔ)分離

          ?多租戶

          ?跨地域復(fù)制

          ?分層分片

          ?輕量化計(jì)算框架 -- Pulsar Functions

          ?...


          為什么開發(fā)RoP


          Apache Pulsar 是下一代云原生分布式消息流平臺(tái),集消息、存儲(chǔ)、輕量化函數(shù)式計(jì)算為一體。自 2016 年開源以來(lái),Pulsar 已被廣泛采用,并于 2018 年被指定為 Apache 頂級(jí)項(xiàng)目。


          RocketMQ 是一款強(qiáng)大的開源分布式消息系統(tǒng),基于高可用分布式集群技術(shù),提供低延時(shí)的、高可靠的消息發(fā)布與訂閱服務(wù)。


          Pulsar 和 RocketMQ 擁有廣泛的用戶群體和強(qiáng)勁的開發(fā)支持,全球許多頭部公司都在使用這兩種消息服務(wù)。同時(shí),我們也收到了用戶的需求,希望能在 Pulsar 與 RocketMQ 之間傳輸數(shù)據(jù),并充分利用這兩種消息系統(tǒng)的優(yōu)勢(shì)。


          Apache Pulsar 通過(guò)對(duì) Consumer 層的抽象,提供了隊(duì)列和流兩種消費(fèi)模型的統(tǒng)一抽象。在 Client 與 Broker 的交互中,Pulsar 基于 Protobuf 的二進(jìn)制協(xié)議,提供更高的性能和更低的延遲。除此之外,通過(guò) Protobuf 協(xié)議,Pulsar 可以更容易地支持并實(shí)現(xiàn)多語(yǔ)言的客戶端,比如:Java、CPP、Python 和 Go 語(yǔ)言等客戶端。


          但是,對(duì)于使用其他消息傳輸協(xié)議編寫的應(yīng)用程序(例如,RocketMQ),由于使用的消息處理協(xié)議和 Pulsar 不同,如果 Pulsar 想要兼容 RocketMQ 協(xié)議,為了將 RocketMQ 的協(xié)議適配到 Pulsar 的消息協(xié)議層中,用戶需要重寫整個(gè)協(xié)議層,這給用戶的遷移和切換帶來(lái)了很大的成本。


          為了解決這個(gè)問(wèn)題,最直觀的處理方式是使用類似 Pulsar Connector 的形式,將用戶在 RocketMQ 中的現(xiàn)存數(shù)據(jù)通過(guò) RocketMQ Wrapper 的方式導(dǎo)入到 Pulsar 集群,但是這需要業(yè)務(wù)端更改自己的業(yè)務(wù)代碼邏輯,同時(shí)需要確保兩邊的數(shù)據(jù)能夠保證一致,這給使用 RocketMQ 的用戶帶來(lái)了很大的技術(shù)挑戰(zhàn)。所以,能否給用戶提供一個(gè)開箱即用的遷移策略和方案并且用戶無(wú)需做任何代碼修改呢?這便是 RoP 誕生的最初目的。


          Apache Pulsar 在 PIP-41(https://github.com/apache/pulsar/wiki/PIP-41%3A-Pluggable-Protocol-Handler) 中介紹了一種全新的接入方式。通過(guò)在 Broker 端暴露 Protocol Handler 插件,將 Netty 的 channel 和 Pulsar 的 Broker Service(https://github.com/apache/pulsar/blob/907fcb5ba8/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java) 對(duì)象暴露給用戶。這允許用戶直接操作和調(diào)用 Pulsar 中比較低階的 API(例如:PersistentTopic 和 ManagerLedger)。基于這個(gè)協(xié)議,用戶無(wú)需更改代碼,只需將服務(wù)請(qǐng)求轉(zhuǎn)發(fā)到 RoP 中,RoP 利用 Protocol Handler 的插件將用戶的請(qǐng)求轉(zhuǎn)發(fā)到 Pulsar 中即可。


          怎么開發(fā)RoP


          一、RoP架構(gòu)



          通過(guò)對(duì)比 Pulsar 和 RocketMQ 之間的協(xié)議可以發(fā)現(xiàn),二者在消息處理的思路上有不少相似之處,比如這兩種協(xié)議都包含如下操作:

          • Topic Lookup: 所有 Clients 與任意 Broker 建立連接之前,會(huì)先去查找當(dāng)前 Topic 的 Owner Broker。獲取到對(duì)應(yīng)的 metadata 之后,Clients 會(huì)與 Owner Broker 之間建立 TCP 連接進(jìn)行數(shù)據(jù)的交互。
          • Produce: Clients 與 Topic 所在的所有 Owner Broker 之間進(jìn)行通信并將消息 append 到對(duì)應(yīng)的分布式日志中。
          • Consume: Clients 與 Topic 所在的所有 Owner Broker 之間進(jìn)行通信并從分布式日志中讀取指定的消息。
          • Offset: Producer 生產(chǎn)到 topic 中的消息會(huì)分配一個(gè)唯一的 offset,Pulsar 中使用 MessageID 來(lái)標(biāo)識(shí) offset。消費(fèi)者可以通過(guò) offset 去日志中獲取指定位置的消息。

          Apache Pulsar 的存儲(chǔ)層使用了 Apache BookKeeper,Pulsar 相當(dāng)于 BookKeeper 的 Client,通過(guò)調(diào)用 ManagerLedger 對(duì)象能夠很容易的達(dá)到為分布式日志操作的目的。基于此,RoP 可以很好的將 RocketMQ 中對(duì) commitLog 和 queueLog 的操作映射到 BookKeeper 中來(lái)。


          二、RoP概念


          Offset 和 MessageID


          在 RocketMQ 中,使用 offset 來(lái)標(biāo)識(shí)消息的位置,當(dāng)消息被生產(chǎn)到指定的 Topic 之后,會(huì)為每一個(gè)消息分配一個(gè)唯一的 offset;在 Pulsar 中,使用 MessageID 來(lái)唯一標(biāo)識(shí)每條消息,每一個(gè) MessageID 由三部分組成,ledgerIDentryIDpartitionID。我們通過(guò)合理的劃分將 messageID 和 offset 進(jìn)行映射,來(lái)唯一標(biāo)識(shí) Topic 中的每一條消息。


          Message


          對(duì)于一條消息,RocketMQ 和 Pulsar 都包含消息的 headers 和 payload 等字段,通過(guò)對(duì)消息協(xié)議的解析,我們可以輕松的將 RocketMQ message 轉(zhuǎn)換為 Pulsar 的 message 格式。為了更好的兼容 Tag 消息的功能,在消息協(xié)議的處理方面增加了 8 字節(jié)的特殊字段,用來(lái)區(qū)分該消息是否屬于 Tag 消息。


          Topic Lookup


          在 Pulsar 中,client 與 broker 建立連接之前,會(huì)根據(jù)當(dāng)前傳入的 Topic 執(zhí)行 Lookup 操作,在 Broker 集群中尋找當(dāng)前 Topic 所在的 Owner Broker,然后將該 Owner Broker 的地址返回并與 client 建立 TCP 連接,再進(jìn)行數(shù)據(jù)交互。在 RocketMQ 中,client 與 broker 建立連接之前,會(huì)先處理 GET_ROUTEINTO_BY_TOPIC 命令,獲取 topic 所在的路由信息后,建立對(duì)應(yīng)的 TCP 連接,再進(jìn)行數(shù)據(jù)交互。


          如何使用RoP


          目前,RoP 發(fā)布了 0.1.0 版本,你可以用過(guò)以下任一方式參與該項(xiàng)目:


          想上手試試?

          可在以下網(wǎng)址下載 RoP 和查閱用戶指南:https://github.com/streamnative/rop/blob/master/README.md。無(wú)論是快速啟動(dòng) standalone RoP 或在現(xiàn)有 Pulsar 集群中部署 RoP,都可輕松實(shí)現(xiàn)。

          另外,為了方便快速使用并驗(yàn)證 RoP,我們提供了 RocketMQ 的常見使用場(chǎng)景和用例,你可以直接使用這些代碼示例驗(yàn)證服務(wù):https://github.com/streamnative/rop/tree/master/examples/src/main/java/org/streamnative/rocketmq/example


          想解決問(wèn)題?

          如有任何問(wèn)題,可以在 RoP GitHub repo 中 創(chuàng)建 issue 或加入 RoP 微信群進(jìn)行討論。無(wú)論哪種方式,RoP 資深專家都隨時(shí)在線:https://github.com/streamnative/rop/issues/new


          參與貢獻(xiàn)?

          RoP 源碼開放并托管在 GitHub 上:https://github.com/streamnative/rop。如需改進(jìn)功能或修復(fù) bug,歡迎提交 PR。


          特別鳴謝


          在此特別鳴謝騰訊云中間件團(tuán)隊(duì)張勇華、冉小龍、韓明澤、夏子承等同學(xué)的支持,以及StreamNative 在架構(gòu)設(shè)計(jì)以及方案的良好建議,共同推進(jìn)了 RoP 項(xiàng)目的順利落地。今后雙方將繼續(xù)攜手并進(jìn)、砥礪前行,為消息服務(wù)貢獻(xiàn)更多力量!



          往期

          推薦


          《當(dāng)我們?cè)诹母呖捎脮r(shí),我們其實(shí)在聊什么?》

          《深度解析:Pulsar的消息存儲(chǔ)機(jī)制和Bookie的GC機(jī)制原理》

          《消息系統(tǒng)興起二次革命:Kafka不需要ZooKeeper》





          掃描下方二維碼關(guān)注本公眾號(hào),

          了解更多微服務(wù)、消息隊(duì)列的相關(guān)信息!

          解鎖超多鵝廠周邊!


          戳原文,了解更多消息隊(duì)列TDMQ的更多信息

          點(diǎn)亮在看,你最好看


          瀏覽 56
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  蜜桃AV无码乱码精品 | 九九九免费在线视频 | 无码视频高清在线不卡 | 亚洲作爱| 不卡高清无码在线 |