StreamNative 宣布開源 MoP:Apache Pulsar 支持原生 MQTT 協(xié)議

我們很高興地宣布 StreamNative 開源了 “MoP”(MQTT on Pulsar)。MoP 將 MQTT 協(xié)議處理插件引入 Pulsar broker。這樣一來(lái),Apache Pulsar 就可以支持原生 MQTT 協(xié)議。

與 KoP 相似,MoP 是一種可插拔的協(xié)議處理插件。將 MoP 協(xié)議處理插件添加到現(xiàn)有 Pulsar 集群后,用戶不用修改代碼就可以將現(xiàn)有的 MQTT 應(yīng)用程序和服務(wù)遷移到 Pulsar。

這樣 MQTT 應(yīng)用程序就可以利用 Pulsar 的特性,例如 Apache Pulsar 計(jì)算和存儲(chǔ)分離的架構(gòu)以及 Apache BookKeeper 保存事件流和 Pulsar 分層存儲(chǔ)等特性。

什么是 Apache Pulsar

Apache Pulsar 是一個(gè)云原生的分布式消息傳遞和流數(shù)據(jù)平臺(tái),每天管理數(shù)千億個(gè)事件。Pulsar 最初由 Yahoo 開發(fā),于 2016 年底開源,并于 2018 年成為 Apache 軟件基金會(huì)的頂級(jí)項(xiàng)目。Pulsar 將重要的 Yahoo 應(yīng)用程序(例如 Yahoo Finance、Yahoo Mail 和 Flickr)連接到數(shù)據(jù)的整合消息傳遞平臺(tái)。

Pulsar 是一種多租戶、高性能解決方案,用于在服務(wù)器之間傳遞消息。Pulsar 支持以下關(guān)鍵特性:

  • Pulsar 的單個(gè)實(shí)例原生支持多個(gè)集群,支持跨地域在集群間無(wú)縫復(fù)制消息
  • 極低的發(fā)布延遲和端到端延遲
  • 支持?jǐn)U展到數(shù)百萬(wàn)個(gè) Topic
  • 通過(guò) Apache BookKeeper 提供的持久化消息存儲(chǔ)機(jī)制保證消息傳遞

目前,Apache Pulsar 已經(jīng)廣泛應(yīng)用于多個(gè)領(lǐng)域。騰訊、Verizon Media、Splunk、中國(guó)移動(dòng)、BIGO 等都在使用 Pulsar 來(lái)實(shí)現(xiàn)業(yè)務(wù)目標(biāo)。

更多用戶案例,可以參考:
https://streamnative.io/blog

什么是 MQTT

MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測(cè)傳輸協(xié)議),是一種基于發(fā)布/訂閱(pubish/subscribe)模式的"輕量級(jí)"通訊協(xié)議。

該協(xié)議構(gòu)建于 TCP/IP 協(xié)議之上,由 IBM 在 1999 年發(fā)布。MQTT 最大優(yōu)點(diǎn)在于,它可以以極少的代碼和有限的帶寬,為連接遠(yuǎn)程設(shè)備提供實(shí)時(shí)可靠的消息服務(wù)。作為一種低開銷、低帶寬占用的即時(shí)通訊協(xié)議,MQTT 在物聯(lián)網(wǎng)、小型設(shè)備、移動(dòng)應(yīng)用等方面得到廣泛應(yīng)用。

為什么需要 MoP

Apache Pulsar 為隊(duì)列和流工作負(fù)載提供統(tǒng)一的消息模型。Apache Pulsar 支持基于 protobuf 的二進(jìn)制協(xié)議,以確保高性能和低延遲。protobuf 有利于實(shí)現(xiàn) Pulsar 客戶端。
https://pulsar.apache.org/docs/en/client-libraries/

而且,該項(xiàng)目也支持 Java,Go,Python 和 C ++ 語(yǔ)言以及社區(qū)提供的第三方客戶端。
https://pulsar.apache.org/docs/en/client-libraries/#thirdparty-clients

Pulsar 支持多租戶,基于 Apache BookKeeper 構(gòu)建持久化機(jī)制。因此,越來(lái)越多的公司正在探索使用 Pulsar 搭建其底層服務(wù)、轉(zhuǎn)變業(yè)務(wù)架構(gòu)。但是,想要采用 Pulsar 的統(tǒng)一消息協(xié)議,用戶必須重寫使用其他消息協(xié)議編寫的現(xiàn)有應(yīng)用程序。

為了解決這個(gè)問(wèn)題,StreamNative 一直致力于開發(fā)新項(xiàng)目。今年,StreamNative 開源了??KoP(Kafka-on-Pulsar)和??AoP(AMQP-on-Pulsar)協(xié)議處理插件,方便將使用 Kafka 和 AMQP 協(xié)議的應(yīng)用程序和服務(wù)遷移到 Pulsar。

  • KoP 是一種可插拔的協(xié)議處理插件。將 KoP 協(xié)議處理插件添加到現(xiàn)有 Pulsar 集群后,用戶不用修改代碼就可以將現(xiàn)有的 Kafka 應(yīng)用程序和服務(wù)遷移到 Pulsar
  • AoP 是一種可插拔的協(xié)議處理插件。將 AoP 協(xié)議處理插件添加到現(xiàn)有 Pulsar 集群后,用戶不用修改代碼就可以將現(xiàn)有的 RabbitMQ 應(yīng)用程序和服務(wù)遷移到 Pulsar

StreamNative 收到大量的用戶請(qǐng)求,請(qǐng)求幫助他們從 MQTT 遷移到 Pulsar。同時(shí),StreamNative 也意識(shí)到在 Pulsar 上原生支持 MQTT 消息傳輸協(xié)議的必要性。所以,StreamNative 開始致力于將通用協(xié)議處理插件框架引入到 Pulsar 中。該框架允許使用 MQTT 傳輸協(xié)議的開發(fā)人員使用 Pulsar。

MoP 架構(gòu)

MoP 是一個(gè)可插拔的協(xié)議處理插件。通過(guò)使用 Pulsar 的 Topic、Cursor 等特性,實(shí)現(xiàn)在 Pulsar 上支持原生 MQTT 協(xié)議。

下圖展示了 MoP 協(xié)議處理插件與 Pulsar 集群的結(jié)合。MQTT Proxy 服務(wù)和 MQTT 協(xié)議處理插件都與 Pulsar broker 一起運(yùn)行。

MoP 概念

消息的服務(wù)質(zhì)量

為了適應(yīng)不同的場(chǎng)景需求,MQTT 協(xié)議支持以下三種QoS 等級(jí):

  • QoS0:最多只發(fā)送一次消息,或者當(dāng)網(wǎng)絡(luò)傳送受阻時(shí),根本不發(fā)送消息。也不會(huì)保存發(fā)送的消息。
  • QoS1:至少發(fā)送一次消息。如果發(fā)送方?jīng)]有收到確認(rèn)包,則會(huì)再次發(fā)送加上 DUP 標(biāo)志的消息,直到發(fā)送方收到確認(rèn)包。
  • QoS2:只成功發(fā)送一次消息。消息必須存儲(chǔ)在發(fā)送方和接收方的本地環(huán)境中,直到被妥善處理。該 QoS 等級(jí)最高的消息服務(wù)等級(jí)。

目前,MoP 協(xié)議處理插件只支持 QoS0 和 QoS1 級(jí)別的消息服務(wù)質(zhì)量。計(jì)劃在未來(lái)版本中支持 QoS2。

MoP Proxy

在 MoP 中,MoP Proxy 是一個(gè)可選組件,主要用來(lái)代理 MoP 的服務(wù)。MoP Proxy 支持將 MoP 擴(kuò)展至多個(gè)節(jié)點(diǎn),以實(shí)現(xiàn)橫向擴(kuò)展服務(wù)。MoP Proxy 主要用于正確地轉(zhuǎn)發(fā) MQTT Client 和 Pulsar Broker 之間傳遞的消息數(shù)據(jù),因此 MQTT Client 只需連接到 MoP Proxy,發(fā)送并接收數(shù)據(jù),而無(wú)需關(guān)注 Topic 的所屬 Pulsar Broker。

MoP Proxy 可以感知 Topic 所屬 Pulsar Broker 的變化。一旦所屬 Pulsar Broker 發(fā)生變化,MoP Proxy 可以將 MQTT Client 的網(wǎng)絡(luò)數(shù)據(jù)包發(fā)送至新的所屬 Pulsar Broker。

下圖說(shuō)明了 MoP Proxy 的服務(wù)流程。

  1. MQTT 客戶端建立與 MoP Proxy 的連接。
  2. MoP Proxy 向 Pulsar 集群發(fā)送查找請(qǐng)求,確定當(dāng)前 Topic 的 owner broker 的 URL 地址。
  3. Pulsar 集群將 owner broker 的 URL 地址返回給 MoP Proxy。
  4. MoP Proxy 建立與 Topic 所在的 owner broker 的連接,并開始在 MQTT 客戶端和 Topic 所在的 owner broker 之間傳輸數(shù)據(jù)。

目前,MoP Proxy 以插件的方式與 Pulsar broker 一起運(yùn)行。用戶可以通過(guò)修改配置來(lái)開啟 Proxy。

有關(guān)詳細(xì)信息,可以參考:
https://github.com/streamnative/mop#how-to-use-proxy

開始使用 MoP

MoP 是一個(gè)開源項(xiàng)目,采用 Apache License V2。

下載 MoP 協(xié)議處理插件最新發(fā)布版本,開始使用 MoP 協(xié)議處理插件。
https://github.com/streamnative/mop/releases/

關(guān)于如何使用 MoP 協(xié)議處理插件,可以參考文檔:
https://github.com/streamnative/mop/blob/master/README.md

如果在使用中遇到任何問(wèn)題,可以在 MoP 倉(cāng)庫(kù)中提交 issue,我們會(huì)在第一時(shí)間回應(yīng)。同時(shí),我們也歡迎你為 MoP 貢獻(xiàn)特性。
https://github.com/streamnative/mop/issues

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容