溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Pulsar 消息概念2

發(fā)布時(shí)間:2020-06-28 16:09:16 來(lái)源:網(wǎng)絡(luò) 閱讀:531 作者:qq5dc264c690eab 欄目:大數(shù)據(jù)

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

名稱(chēng)組成 說(shuō)明
persistent / non-persistent 持久和非持久
tenant 租戶(hù)
namespace 命名空間 主題的管理單元,用作相關(guān)主題的分組機(jī)制。大多數(shù)主題配置是在命名空間級(jí)別執(zhí)行的。每個(gè)租戶(hù)可以有多個(gè)命名空間
topic 名字的最后一部分

無(wú)需顯式創(chuàng)建新主題
你不需要在Pulsar中顯式地創(chuàng)建主題。如果客戶(hù)端嘗試向尚未存在的主題寫(xiě)入消息或接收消息,則Pulsar將自動(dòng)在主題名稱(chēng)中提供的命名空間下創(chuàng)建該主題

2 命名空間
名稱(chēng)空間是租戶(hù)中的邏輯術(shù)語(yǔ)。租戶(hù)可以通過(guò)管理API創(chuàng)建多個(gè)名稱(chēng)空間。例如,具有不同應(yīng)用程序的租戶(hù)可以為每個(gè)應(yīng)用程序創(chuàng)建單獨(dú)的命名空間。命名空間允許應(yīng)用程序創(chuàng)建和管理主題的層次結(jié)構(gòu)。主題my tenant/app1是我的租戶(hù)的應(yīng)用程序app1的命名空間??梢栽诿臻g下創(chuàng)建任意數(shù)量的主題

3 訂閱模式
Pulsar有三種訂閱模式:獨(dú)占(exclusive),共享(shared),故障轉(zhuǎn)移(failover)
獨(dú)占模式是默認(rèn)訂閱模式
共享模式的局限性
使用共享模式時(shí)有兩件重要的事情需要注意:
無(wú)法保證消息排序。
不能將累積確認(rèn)與共享模式一起使用。
4 密鑰共享(Key_shared)
在密鑰共享模式下,多個(gè)消息者可以同一訂閱
密鑰共享模式的限制
在使用密鑰共享模式時(shí),有兩件重要的事情需要注意:
您需要為消息指定密鑰或orderingKey
不能將累積確認(rèn)與密鑰共享模式一起使用
密鑰共享訂閱是一個(gè)測(cè)試版功能。您可以在broker.config禁用它(Pulsar 2.4.1)

5 多主題訂閱
從Pulsar 1.23.0版開(kāi)始,Pulsar用戶(hù)可以同時(shí)訂閱多個(gè)主題,兩種方式
1)基于正則表達(dá)式(regex),例如persistent://public/default/finance-*
2)通過(guò)明確定義的topic列表
當(dāng)通過(guò)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ì)于訂閱模式如何工作,沒(méi)有任何不同。分區(qū)只是決定了從生產(chǎn)者生產(chǎn)消息到消費(fèi)者處理及確認(rèn)消息過(guò)程中發(fā)生的事情。
分區(qū)topic需要通過(guò)admin API指定創(chuàng)建。創(chuàng)建的時(shí)候可以指明分區(qū)的數(shù)量。
路由模式

模式 說(shuō)明
RoundRobinPartition 如果沒(méi)有提供密鑰,則生產(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 如果沒(méi)有提供密鑰,生產(chǎn)者將隨機(jī)選擇一個(gè)單獨(dú)的分區(qū)并將所有消息發(fā)布到該分區(qū)中。如果在消息上指定了密鑰,則分區(qū)的生產(chǎn)者將散列該密鑰并將消息分配給特定的分區(qū)。
CustomPartition 使用將被調(diào)用的自定義消息路由器實(shí)現(xiàn)來(lái)確定特定消息的分區(qū)。用戶(hù)可以通過(guò)使用Java客戶(hù)端并實(shí)現(xiàn)MessageRouter接口來(lái)創(chuàng)建自定義路由模式。

消息順序
消息的順序與消息路由模式和消息密鑰有關(guān)。通常,用戶(hù)需要按密鑰分區(qū)保證排序。
如果消息附加了密鑰,則在使用SinglePartition或RoundRobinPartition模式時(shí),將根據(jù)哈希方案將消息路由到相應(yīng)的分區(qū)

順序規(guī)則 說(shuō)明 路由模式和key
按key分發(fā)(Per-key-partition) 所有具有相同key的消息都將按順序排列并放置在同一個(gè)分區(qū)中。 使用SinglePartition或RoundRobinPartition模式,每個(gè)消息都提供key
按生產(chǎn)者分發(fā)(Per-producer) 來(lái)自同一個(gè)生產(chǎn)者的所有消息都將按順序排列 使用SinglePartition模式,并且沒(méi)有為每個(gè)消息提供key

7 非持久性主題
格式如下:
non-persistent://tenant/namespace/topic
生產(chǎn)者和消費(fèi)者可以以與持久主題相同的方式連接到非持久主題,關(guān)鍵的區(qū)別在于主題名稱(chēng)必須以非持久主題開(kāi)頭。所有三種訂閱模式(獨(dú)占、共享和故障轉(zhuǎn)移)都支持非持久性主題。
客戶(hù)端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 消息保留和過(guò)期
默認(rèn)情況下,Pulsar消息服務(wù)器
立即刪除消費(fèi)者已確認(rèn)的所有消息,以及
將所有未確認(rèn)的消息持久存儲(chǔ)在消息待辦事項(xiàng)中。
但是,Pulsar有兩個(gè)特性,使您能夠覆蓋此默認(rèn)行為:
消息保留使您能夠存儲(chǔ)已由消費(fèi)者確認(rèn)的消息
消息過(guò)期使您能夠?yàn)樯形创_認(rèn)的消息設(shè)置生存時(shí)間(TTL)

9 消息去重
當(dāng)消息被Pulsar持久化多于一次的時(shí)候,會(huì)發(fā)生數(shù)據(jù)重復(fù)。消息去重是Pulsar可選的特性,阻止不必要的消息重復(fù),每條消息僅處理一次

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI