Dawn's Blogs

分享技术 记录成长

0%

Pulsar消息队列(2)租户 命名空间 Topic

Pulsar 在逻辑上的层级,从上到下依次为租户、命名空间、Topic。

每个租户都可以有单独的认证和授权机制,可以针对租户设置存储配额、消息生存时间 TTL 和隔离策略。

pulsar-logical-arch2.png

默认情况下一个 Topic 中的消息只能由 Pulsar 服务层中的一个 Broker 提供服务,因此单个 Topic 的吞吐量受限于为其提供服务的 Broker 的计算能力。

好在 Pulsar 还支持分区主题,这允许多个 Broker 提供服务,就可以将负载分布到多台机器上。在 Pulsar 内部,分区主题被实现为 N 个内部 Topic,N 是分区数量,分区跨 Broker 的分布由 Pulsar 自动管理,这对用户来说是完全透明的。 Pulsar 将分区主题实现为多个内部主题,这样就可以在需要增加分区数量的时候不必重新平衡整个主题,Pulsar 只需在其内部创建新的内部主题就能够立即接收新的消息,使客户端能在不中断的情况下对现有分区进行消息读写。

当生产者发布消息到分区主题时,不需要特意指定路由模式,默认以轮循的方式将消息均匀分布到各个分区。支持以下3种路由模式:

  • SinglePartition:如果没有消息 key 提供,生产者将会随机选择一个固定的分区来发布消息(同一个生产者生产在同一个分区中),可用于将来自特定生产者的消息分组在一起,以在没有键值时维护消息顺序。
  • RoundRobinPartition:如果没有消息 key 提供,将以轮循的方式将消息均匀分布到各个分区。
  • CustomPartition:定制实现路由模式,控制消息分发到 Topic 的分区中。

如果提供了消息 key,会以 key 做 hash,然后分配消息到指定分区。因此分区中消息的顺序与路由模式和消息的key有关,所有拥有相同的 key 的消息有序,将会被发送到相同的分区