5000字闡述云原生消息中間件Apache Pulsar的核心特性和設(shè)計(jì)概覽
點(diǎn)擊上方藍(lán)色字體,選擇“設(shè)為星標(biāo)”
回復(fù)”面試“獲取更多驚喜

Pulsar中的核心概念

Topic

Bookie
Broker
Entry
Ledger
MetaData Storage
Journal
Entry log
Index file
Ledger cache
數(shù)據(jù)落盤
Data Compaction
Minor compaction
Major compaction
跨地域復(fù)制( geo-replication),單個(gè)實(shí)例原生支持多個(gè)集群(跨集群復(fù)制)
極低的發(fā)布延遲和端到端延遲
可無縫擴(kuò)展到超過一百萬個(gè) topic
簡單的客戶端API,支持Java、Go、Python和C++
支持多種topic訂閱模式:獨(dú)占訂閱、共享訂閱、故障轉(zhuǎn)移訂閱、鍵共享(exclusive, shared, failover, key_shared)
通過 Apache BookKeeper 提供的持久化消息存儲(chǔ)機(jī)制保證消息傳遞
由輕量級(jí)的無服務(wù)器(serverless )計(jì)算框架 Pulsar Functions 實(shí)現(xiàn)流原生的數(shù)據(jù)處理
基于 Pulsar Functions 的無服務(wù)器連接器框架 Pulsar IO 使得數(shù)據(jù)更易移入、移出 Apache Pulsar
分層式存儲(chǔ)可在數(shù)據(jù)陳舊時(shí),將數(shù)據(jù)從熱存儲(chǔ)卸載到冷/長期存儲(chǔ)(如S3、GCS)中
Pulsar的架構(gòu)設(shè)計(jì)
一個(gè)或者多個(gè) broker :負(fù)責(zé)處理和負(fù)載均衡 producer 發(fā)出的消息,并將這些消息分派給 consumer;Broker 與 Pulsar 配置存儲(chǔ)交互來處理相應(yīng)的任務(wù),并將消息存儲(chǔ)在 BookKeeper 實(shí)例中(又稱 bookies);Broker 依賴 ZooKeeper 集群處理特定的任務(wù);
一個(gè)BookKeeper:包含一個(gè)或多個(gè) bookie 的 BookKeeper 集群負(fù)責(zé)消息的持久化存儲(chǔ);
一個(gè)ZooKeeper:特定于某個(gè)Pulsar集群的ZooKeeper集群處理Pulsar集群之間的協(xié)調(diào)任務(wù)。

利用多個(gè)ledger保存獨(dú)立的日志
為按條目復(fù)制的順序數(shù)據(jù)提供了非常高效的存儲(chǔ)
保證了多系統(tǒng)掛掉時(shí)ledgers的讀取一致性
提供不同的Bookies之間均勻的IO分布的特性
在容量和吞吐量上都可以水平擴(kuò)展。通過向集群添加更多bookie,可以立即增加容量
Bookies可以包含數(shù)千個(gè)具備同時(shí)讀寫功能的ledger。使用多個(gè)磁盤設(shè)備,一個(gè)用于日志,另一個(gè)用于一般存儲(chǔ),這樣Bookies可以將讀操作的影響和對于寫操作的延遲分隔開
除消息數(shù)據(jù)外,游標(biāo)(cursors)還永久存儲(chǔ)在BookKeeper中;Cursors是消費(fèi)端訂閱消費(fèi)的位置;BookKeeper讓Pulsar可以用一種可擴(kuò)展的方式存儲(chǔ)消費(fèi)位置

Pulsar Broker可以創(chuàng)建ledeger,添加內(nèi)容到ledger和關(guān)閉ledger。
當(dāng)一個(gè)ledger被關(guān)閉后,除非明確的要寫數(shù)據(jù)或者是因?yàn)閷懭肫鲯斓魧?dǎo)致ledger關(guān)閉,這個(gè)ledger只會(huì)以只讀模式打開。
最后,當(dāng)ledger中的條目不再有用的時(shí)候,整個(gè)legder可以被刪除(ledger分布是跨Bookies的)。
多個(gè)Broker節(jié)點(diǎn)組成一個(gè)Pulsar Cluster;多個(gè)Pulsar Cluster組成一個(gè)Pulsar Instance。
Pulsar通過geo-replication支持一個(gè)Instance內(nèi)在不同的集群發(fā)送和消費(fèi)消息。


Pulsar的核心設(shè)計(jì)
保證不丟失消息
強(qiáng)順序性保證
讀寫延遲

你好,我是王知無,一個(gè)大數(shù)據(jù)領(lǐng)域的硬核原創(chuàng)作者。
做過后端架構(gòu)、數(shù)據(jù)中間件、數(shù)據(jù)平臺(tái)&架構(gòu)、算法工程化。
專注大數(shù)據(jù)領(lǐng)域?qū)崟r(shí)動(dòng)態(tài)&技術(shù)提升&個(gè)人成長&職場進(jìn)階,歡迎關(guān)注。
