1 主題
主題名稱結(jié)構(gòu)的URL:
{persistent|non-persistent}://tenant/namespace/topic

創(chuàng)新互聯(lián)主營(yíng)銀川網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都App定制開發(fā),銀川h5重慶小程序開發(fā)搭建,銀川網(wǎng)站營(yíng)銷推廣歡迎銀川等地區(qū)企業(yè)咨詢
| 名稱組成 | 說明 |
|---|---|
| persistent / non-persistent | 持久和非持久 |
| tenant | 租戶 |
| namespace | 命名空間 主題的管理單元,用作相關(guān)主題的分組機(jī)制。大多數(shù)主題配置是在命名空間級(jí)別執(zhí)行的。每個(gè)租戶可以有多個(gè)命名空間 |
| topic | 名字的最后一部分 |
無需顯式創(chuàng)建新主題
你不需要在Pulsar中顯式地創(chuàng)建主題。如果客戶端嘗試向尚未存在的主題寫入消息或接收消息,則Pulsar將自動(dòng)在主題名稱中提供的命名空間下創(chuàng)建該主題
2 命名空間
名稱空間是租戶中的邏輯術(shù)語。租戶可以通過管理API創(chuàng)建多個(gè)名稱空間。例如,具有不同應(yīng)用程序的租戶可以為每個(gè)應(yīng)用程序創(chuàng)建單獨(dú)的命名空間。命名空間允許應(yīng)用程序創(chuàng)建和管理主題的層次結(jié)構(gòu)。主題my tenant/app1是我的租戶的應(yīng)用程序app1的命名空間。可以在命名空間下創(chuàng)建任意數(shù)量的主題
3 訂閱模式
Pulsar有三種訂閱模式:獨(dú)占(exclusive),共享(shared),故障轉(zhuǎn)移(failover)
獨(dú)占模式是默認(rèn)訂閱模式
共享模式的局限性
使用共享模式時(shí)有兩件重要的事情需要注意:
無法保證消息排序。
不能將累積確認(rèn)與共享模式一起使用。
4 密鑰共享(Key_shared)
在密鑰共享模式下,多個(gè)消息者可以同一訂閱
密鑰共享模式的限制
在使用密鑰共享模式時(shí),有兩件重要的事情需要注意:
您需要為消息指定密鑰或orderingKey
不能將累積確認(rèn)與密鑰共享模式一起使用
密鑰共享訂閱是一個(gè)測(cè)試版功能。您可以在broker.config禁用它(Pulsar 2.4.1)
5 多主題訂閱
從Pulsar 1.23.0版開始,Pulsar用戶可以同時(shí)訂閱多個(gè)主題,兩種方式
1)基于正則表達(dá)式(regex),例如persistent://public/default/finance-*
2)通過明確定義的topic列表
當(dāng)通過regex訂閱多個(gè)主題時(shí),所有主題必須位于同一命名空間中
不能保證順序性
當(dāng)消費(fèi)者訂閱多個(gè)主題時(shí),Pulsar通常就單個(gè)主題提供的所有訂購(gòu)保證都不成立。如果您的Pulsar用例涉及任何嚴(yán)格的訂購(gòu)要求,我們強(qiáng)烈建議您不要使用此功能
下面是一些Java的多主題訂閱示例:
import java.util.regex.Pattern;
import org.apache.pulsar.client.api.Consumer;
import org.apache.pulsar.client.api.PulsarClient;
PulsarClient pulsarClient = // Instantiate Pulsar client object
// Subscribe to all topics in a namespace
Pattern allTopicsInNamespace = Pattern.compile("persistent://public/default/.*");
Consumer<byte[]> allTopicsConsumer = pulsarClient.newConsumer()
.topicsPattern(allTopicsInNamespace)
.subscriptionName("subscription-1")
.subscribe();
// Subscribe to a subsets of topics in a namespace, based on regex
Pattern someTopicsInNamespace = Pattern.compile("persistent://public/default/foo.*");
Consumer<byte[]> someTopicsConsumer = pulsarClient.newConsumer()
.topicsPattern(someTopicsInNamespace)
.subscriptionName("subscription-1")
.subscribe();
6分區(qū)主題
分區(qū)topic和普通topic,對(duì)于訂閱模式如何工作,沒有任何不同。分區(qū)只是決定了從生產(chǎn)者生產(chǎn)消息到消費(fèi)者處理及確認(rèn)消息過程中發(fā)生的事情。
分區(qū)topic需要通過admin API指定創(chuàng)建。創(chuàng)建的時(shí)候可以指明分區(qū)的數(shù)量。
路由模式
| 模式 | 說明 |
|---|---|
| RoundRobinPartition | 如果沒有提供密鑰,則生產(chǎn)者將以循環(huán)方式發(fā)布所有分區(qū)上的消息,以實(shí)現(xiàn)最大吞吐量。請(qǐng)注意,循環(huán)調(diào)度不是針對(duì)單個(gè)消息執(zhí)行的,而是設(shè)置為批處理延遲的相同邊界,以確保批處理有效。如果在消息上指定了密鑰,則分區(qū)的生產(chǎn)者將散列該密鑰并將消息分配給特定的分區(qū)。這是默認(rèn)模式。 |
| SinglePartition | 如果沒有提供密鑰,生產(chǎn)者將隨機(jī)選擇一個(gè)單獨(dú)的分區(qū)并將所有消息發(fā)布到該分區(qū)中。如果在消息上指定了密鑰,則分區(qū)的生產(chǎn)者將散列該密鑰并將消息分配給特定的分區(qū)。 |
| CustomPartition | 使用將被調(diào)用的自定義消息路由器實(shí)現(xiàn)來確定特定消息的分區(qū)。用戶可以通過使用Java客戶端并實(shí)現(xiàn)MessageRouter接口來創(chuàng)建自定義路由模式。 |
消息順序
消息的順序與消息路由模式和消息密鑰有關(guān)。通常,用戶需要按密鑰分區(qū)保證排序。
如果消息附加了密鑰,則在使用SinglePartition或RoundRobinPartition模式時(shí),將根據(jù)哈希方案將消息路由到相應(yīng)的分區(qū)
| 順序規(guī)則 | 說明 | 路由模式和key |
|---|---|---|
| 按key分發(fā)(Per-key-partition) | 所有具有相同key的消息都將按順序排列并放置在同一個(gè)分區(qū)中。 | 使用SinglePartition或RoundRobinPartition模式,每個(gè)消息都提供key |
| 按生產(chǎn)者分發(fā)(Per-producer) | 來自同一個(gè)生產(chǎn)者的所有消息都將按順序排列 | 使用SinglePartition模式,并且沒有為每個(gè)消息提供key |
7 非持久性主題
格式如下:
non-persistent://tenant/namespace/topic
生產(chǎn)者和消費(fèi)者可以以與持久主題相同的方式連接到非持久主題,關(guān)鍵的區(qū)別在于主題名稱必須以非持久主題開頭。所有三種訂閱模式(獨(dú)占、共享和故障轉(zhuǎn)移)都支持非持久性主題。
客戶端API
PulsarClient client = PulsarClient.builder()
.serviceUrl("pulsar://localhost:6650")
.build();
String npTopic = "non-persistent://public/default/my-topic";
String subscriptionName = "my-subscription-name";
消費(fèi)
Consumer<byte[]> consumer = client.newConsumer()
.topic(npTopic)
.subscriptionName(subscriptionName)
.subscribe();
生產(chǎn)
Producer<byte[]> producer = client.newProducer()
.topic(npTopic)
.create();
8 消息保留和過期
默認(rèn)情況下,Pulsar消息服務(wù)器:
立即刪除消費(fèi)者已確認(rèn)的所有消息,以及
將所有未確認(rèn)的消息持久存儲(chǔ)在消息待辦事項(xiàng)中。
但是,Pulsar有兩個(gè)特性,使您能夠覆蓋此默認(rèn)行為:
消息保留使您能夠存儲(chǔ)已由消費(fèi)者確認(rèn)的消息
消息過期使您能夠?yàn)樯形创_認(rèn)的消息設(shè)置生存時(shí)間(TTL)
9 消息去重
當(dāng)消息被Pulsar持久化多于一次的時(shí)候,會(huì)發(fā)生數(shù)據(jù)重復(fù)。消息去重是Pulsar可選的特性,阻止不必要的消息重復(fù),每條消息僅處理一次
當(dāng)前文章:Pulsar消息概念2
本文鏈接:http://chinadenli.net/article44/jpcjee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、網(wǎng)頁設(shè)計(jì)公司、品牌網(wǎng)站設(shè)計(jì)、服務(wù)器托管、、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)