Pulsar官方文档翻译-入门必看-概念和架构-消息传输核心概念(MessagingCon。。。

更新时间:2023-06-22 00:37:13 阅读: 评论:0

wormPulsar官⽅⽂档翻译-⼊门必看-概念和架构-消息传输核⼼概念opinionated
(MessagingCon。。。
官⽹原⽂标题《Concepts and Architecture--Messaging Concepts》
翻译时间:2018-10-04
译者:本⽂介绍了Pulsar消息系统中的核⼼概念,是⼊门学习pulsar的开篇⽂档。他的核⼼概念和其他消息系统类似,尤其是kafka,但是⼜都有所不同。只有深刻理解好这些基础的概念,将来对pulsar的学习才能更为轻松!
1 消息概念
Pular采⽤了发布订阅的设计模式,也称作pub-sub。producer发布消息到topic,consumer可以订阅这些topic,处理发布过来的消息,在处理完成后发送确认。
⼀旦订阅被创建,所有的消息都将被Pulsar保存,即使consumer已断开了连接。只有在consumer确认消息已经被成功处理后,保存下来的消息才会被丢弃。
1.1 消息
消息是Pulsar的基础单元。producer发给topic的内容,consumer从topic消费的内容,就是消息。和邮政系统类⽐,消息就相当于信件。
组成⽤途
value/data payload消息携带的数据,所有pulsar的消息携带原始bytes,但是消息数据也需要遵循数据shcema
Key消息可以被Key打标签。这可以对topic压缩之类的事情起作⽤
properties可选的,⽤户定义属性 的key/value map
Producer Name⽣产消息的producer的名称(producer被⾃动赋予默认名称,但你也可以请求⾃⼰指定)
true是什么意思Sequence ID在topic中,每个Pulsar消息属于⼀个有序的序列。消息的quence ID是他在序列中的次序
Publish time消息发布的时间戳
Event time 可选的时间戳,应⽤可以附在消息上,代表某个事件发⽣的时间,例如,消息被处理时。如果没有明确的设置,那么event time为0
六级听力技巧若想了解Pulsar消息内容的更深⼊分解,请参考Pulasr的⽂档
1.2 ⽣产者
⽣产者是关联到topic的程序,它发布消息到Pulsar的broker上。
1.2.1 发送模式
producer可以以同步或者异步的⽅式发布消息到broker。
bia
模式描述
同步发送发送消息后,producer等待broker的确认。如果没有收到确认,producer会认为发送失败。
异步发送producer将会把消息放⼊blocking队列,然后马上返回。客户端类库将会在背后把消息发送给broker。如果队列满了,根据传给producer的参数,producer可能阻塞或者直接返回失败。
1.2.2 压缩
为了节省带宽,在传输过程中,producer发布的消息可以被压缩。⽬前pulsar⽀持两种压缩类型:
1.2.3 批处理
如果批处理开启,producer将会累积⼀批消息,然后通过⼀次请求发送出去。批处理的⼤⼩取决于最⼤的消息数量及最⼤的发布延迟。
1.3 消费者
消费者通过订阅关联到主题,然后接收消息的程序。
1.3.1 接收模式
消息可以通过同步或者异步的⽅式从broker接受。
模式描述
同步接收同步接收将会阻塞,直到消息可⽤
异步接收异步接收⽴即返回future值--java中的CompletableFuture,⼀旦新消息可⽤,他即刻完成
1.3.2 确认
消费者成功处理了消息,需要发送确认给broker,以让broker丢掉这条消息(否则它将存储着此消息)。
消息的确认可以⼀个接⼀个,也可以累积⼀起。累积确认时,消费者只需要确认最后⼀条他收到的消息。所有之前(包含此条)的消息,都不会被重新发给那个消费者。
累积消息确认不能⽤于shared 订阅模式,因为shared订阅为同⼀个订阅引⼊了多个消费者。
1.3.3 监听
客户端类库提供了他们对于consumer的监听实现。举⼀个Java客户端的例⼦,它提供了MessageListener接⼝。在这个接⼝中,⼀旦接受到新的消息,received⽅法将被调⽤。
1.4 主题(Topic)
和其他的发布订阅系统⼀样,Pulsar中的topic是带有名称的通道,⽤来从producer到consumer传输消息。Topic的名称是符合良好结构的URL。
{persistent|non-persistent}://tenant/namespace/topic
Topic名称组成描述
persistent/ non-persistent 定义了topic类型,Pulsar⽀持两种不同topic:持久和⾮持久
(默认是持久类型,如果你没有指明类型,topic将会是持久类型)。持久topic的所有消息都会保存在硬盘上(这意味着多块硬盘,除⾮是单机模式的broker),反之,⾮持久topic的数据不会存储到硬盘上
tenant实例中topic的租户。tenant是Pulsar多租户的基本要素。可以被跨集群的传播。
namespace topic的管理单元,相关topic组的管理机制。⼤多数的topic配置在namespace层⾯⽣效。每个tenant可以有多个namespace
topic主题名称的最后组成部分,topic的名称很⾃由,没有什么特殊的含义。
不需要显式的创建topic
你并不需要显式的创建topic。如果客户端尝试从⼀个还不存在的topic写或者接受消息,pulsar将会按在topic名称提供的
namnespace下⾃动创建topic。
1.5 命名空间(namespace)
命名空间是租户内部逻辑上的命名术语。⼀个租户可以通过admin API创建多个命名空间。例如,⼀个对接多个应⽤的租户,可以为每个应⽤创建不同的namespace。
1.6 订阅模型
订阅是命名过的配置规则,指导消息如何投递给消费者。Pulsar有三种订阅模式:exclusive,shared,failover,下图展⽰了这三种模式:
extent1.6.1 Exclusive(独占)
独占模式,只能有⼀个消费者绑定到订阅(subscription)上。如果多于⼀个消费者尝试以同样⽅式去订阅主题,消费者将会收到错误。上⾯的图中,只有Consumer A可以消费。
Exclusive模式为默认订阅模式。
1.6.2 Shared(共享)
shared或者round robin模式中,多个消费者可以绑定到同⼀个订阅上。消息通过round robin轮询机制分发给不同的消费者,并且每个消息仅会被分发给⼀个消费者。当消费者断开连接,所有被发送给他,holiday
但没有被确认的消息将被重新安排,分发给其它存活的消费者。
第⼀幅图中,Consumer-B-1和Consumer-B-2都可以订阅主题,其实Consumer-C-1或者其它Consumer也可以订阅。
parcel
1.6.3 Failover(灾备)
Failover模式中,多个consumer可以绑定到同⼀个subscription。consumer将会按字典顺序排序,第⼀个consumer被初始化为唯⼀接受消息的消费者。这个consumer被称为master consumer。
当master consumer断开时,所有的消息(未被确认和后续进⼊的)将会被分发给队列中的下⼀个consumer。
第⼀个图中,Consumer-C-1是master consumer,当Consumer-C-1断开连接时,由于Consumer-C-2在队列中下⼀个位置,那么它将会开始接收消息。
1.7 多主题订阅
当consumer订阅pulsar的主题,默认情况下,它订阅了⼀个指定的主题,例如:persistent://public/default/my-topic。从Pulsar的1.23.0-incubating的版本,Pulsar消费者可以同时订阅多个topic。你可以⽤以下两种⽅式定义topic的列表:
通过基础的正则表达式(regex),例如 persistent://public/default/finance-.*
通过明确定义的topic列表
通过正则订阅多主题时,所有的主题必须在同⼀个命名空间(namespace)
当订阅多主题时,pulsar客户端会⾃动调⽤Pulsar的API来发现匹配表达式的所有topic,然后全部订阅。如果此时有暂不存在的topic,那么⼀旦这些topic被创建,conusmer会⾃动订阅。
不能保证顺序性
当消费者订阅多主题时,pulsar所提供对单⼀主题订阅的顺序保证,就hold不住了。如果你在使⽤pulsar的时候,遇到必须保证顺序的需求,我们强烈建议不要使⽤此特性
下⾯是多主题订阅在java中的例⼦:
清华在职研究生
import 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 = pile("persistent://public/default/.*");
Consumer allTopicsConsumer = pulsarClient.subscribe(allTopicsInNamespace, "subscription-1");
// Subscribe to a subts of topics in a namespace, bad on regex
Pattern someTopicsInNamespace = pile("persistent://public/default/foo.*");
Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "subscription-1");
代码例⼦,请见:

本文发布于:2023-06-22 00:37:13,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/153087.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:消息   订阅   消费者   确认   主题   模式   发送
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图