Pulsar 消息概览
目录
Consuemr
Receive modes
同步接受消息
异步接受消息
Acknowledgement
消费者否定应答,当消费者消费消息失败,需要重新消费消息,可以发送否定应答给broker。当broker接收到否定应答,会重新投递消息给这个消费者。
超时应答,超时机制允许 client 在一个时间范围内来跟踪未应答的消息,超过 ackTimeout,客户端发送edeliver unacknowledged messages 给broker,因此broker 重新投递这个未被应答的消息给消费者。
对比否定应答与超时应答,否定应答是更合适。
重试主题比否定应答是更合适的,因重试主题消息持久化在BookKeeper中,否定应答是缓存在客户端这侧的。
<topicname>-<subscriptionname>-RETRY
重试主题,消费失败的主题可以存储在重试主题中,方便后续进行重新消费,消费者会自动订阅重试主题。
当消息达到最大消息重试次数,还没有被消费的消息,将会被移动到死信主题,进入人工处理流程。

<topicname>-<subscriptionname>-DLQ
死信主题用来存储消费失败的消息,然后自己可以决定死信消息的处理逻辑。
Topics
{persistent|non-persistent}://tenant/namespace/topic
persistent / non-persistent 消息是否持久化到磁盘。
tenant
租户是Pulsar多租户的实现机制,可以跨越多个集群实例。
namespace
主题的管理单元,他扮演了一个组机制与相关主题的集合,大多数的主题配置是在这个层次被执行的,每个租户可以有一个或多个namespace。
一个namespace允许多个应用创建和管理一些垂直相关的主题。
namespace 可以代替SET概念,目前SET实现逻辑是在主题下的,后续可以优化为SET在主题逻辑之上。
Subscriptions
订阅关系,决定了消息与 consumers 的对应的消费关系。四个主要消费模式:exclusive、shared、failover、key_shared。
Subscription modes

代表两种游标订阅类型场景
订阅关系被创建,关联的游标从上次的位置开始消费被创建。
当消费者的订阅关系重启,他可以从上次消息消费的位置开始消费。
Durable:游标被持久化,保持了消息,记录了消费的位置(存储在BookKeeper)。
NonDurable:游标未被初始化,一旦broker重启,游标位置将会丢失,不会被恢复。
从version 1.23.0-incubating,消费者可以订阅多个主题。多个主题的选择支持正则表达式或 topic list。
主题多个分区,每个分区分配在不同的broker上,与kafka主题分区一致。
Messages for this topic are broadcast to two consumers. The routing mode determines each message should be published to which partition, while the subscription type determines which messages go to which consumers.

单主题单分区有序
2. 指定partition生产发送,消息单分区有序
非持久化主题,消息不会被持久化到磁盘上,只会存储在内存中。
当broker 宕机、消费者订阅主题关系链接断开,正在运输处理中的消息将会丢失。
非持久化主题生产消费更快,发送延迟更低。
系统主题是Pulsar内部使用,并提前定义好的。可以是持久化主题与非持久化主题。

Message redelivery
Pulsar 支持优雅处理失败和保证关键数据不会丢失。
Pulsar 支持using at-least-once delivery semantics
否定应答
应答超时
重试主题
默认策略
消息被一个consumer消费并应答,及立即删除所有消息。
持久化所有未被应答的消息作为一个backlog。
消息保留策略
保留策略开启,已经被consumer 应答的消息也会存储在BookKeeper中。
消息过期策略
消息过期策略,未被consumer应答的消息设置存活时间,及时未被应答,也会在到期之后进行删除。

消息发生重复时,一条消息被Pulsar持久化一次以上。主要是在BookKeeper存储层去除重复,消费可能是存在重复消费的。

生产者幂等性,消息只被生产者发送一次。这个需要客户端应用程序去处理,Pulsar 不具备这样的能力。
延迟消息支持延迟一段时间之后,消息会被消费,延迟消息被存储在BookKeeper中。
DelayedDeliveryTracker在内存中维护了一个时间索引,当消息到达之后被发布到broker中去。

参考
网友评论