非持久topic
简介
默认情况下,Pulsar会将所有未确认的消息持久存储在多个BookKeeper bookies(存储节点)上。因此,持久性主题上的消息数据可以在 broker 重启和订阅者故障转移之后继续存在。
Pulsar也提供了非持久topic。非持久topic的消息不会被保存在硬盘上,只存活于内存中。当使用非持久topic分发时,杀掉Pulsar的broker或者关闭订阅者,此topic( non-persistent))上所有的瞬时消息都会丢失,意味着客户端可能会遇到消息缺失。
非持久性主题具有这种形式的名称(注意名称中的 non-persistent):
non-persistent://tenant/namespace/topic
如何使用非持久topic的更多信息,请参考Non-persistent messagingcookbook
在非持久性topic状态下,broker无需将其持久化到BookKeeper中,而会立即将消息传递给所有连接的订阅者。如果有一个订阅者断开连接,broker将无法重发这些瞬时消息,订阅者将永远也不能收到这些消息了。 去掉持久化存储的步骤,在某些情况下,使得非持久topic的消息比持久topic稍微变快。但是同时,Pulsar的一些核心优势也丧失掉了。
非持久topic,消息数据仅存活在内存。 如果broker挂掉或者因其他情况不能从内存取到,你的消息数据就可能丢失。除非你的项目一定需要他或者你有能力确保它一定不会各种原因丢失消息,不然并不推荐使用
默认非持久topic在broker上是开启的。 你可以通过broker的配置关闭。您可以通过pulsar admin topics命令管理非持久性主题。有关更多信息,请参阅pulsar admin。
性能
一般情况下非持久性消息传递比持久性消息传递要更快,因为broker不需要持久化消息,并在消息传递到连接的代理后会立即将ACK发送回生产者。非持久topic让producer有更低的发布延迟。
客户端API
Producer和consumer以连接持久topic同样的方式连接到非持久topic。重要的区别是,topic的名称必须以non-persistent开头。非持久性主题支持三种订阅模式:独占、共享、故障转移
下面是一个非持久topic的java consumer例子:
PulsarClient client