跳到主要内容
英文版本为准

本页译自英文,由模型翻译。若与英文原文存在差异,以英文原文为准。

主题

Pulsar 主题位于某个租户的命名空间中。持久化主题把消息保存在 BookKeeper 中,分区主题就是每个分区一个主题。

租户包含命名空间,命名空间包含一个分区主题、一个持久化主题和一个非持久化主题,生产者向分区主题发布租户 acme命名空间 acme/orderspersistent://acme/orders/paymentspersistent://acme/orders/creatednon-persistent://acme/orders/ticks生产者由键选择分区-partition-00123-partition-101-partition-20120123保存在BookKeeper ledger 中不保存任何内容:只发给此刻已连接的消费者只有名字时,就是默认命名空间中的持久化主题:orders 即 persistent://public/default/orders
以文字阅读本图
  1. 租户 acme: -partition-0; 0; 1; 2; 3; -partition-1; 0; 1; -partition-2; 0; 1; 2; 0; 1; 2; 3; 保存在 BookKeeper ledger 中; 不保存任何内容:只发给此刻已连接的消费者
  2. 命名空间 acme/orders: -partition-0; 0; 1; 2; 3; -partition-1; 0; 1; -partition-2; 0; 1; 2; 0; 1; 2; 3; 保存在 BookKeeper ledger 中; 不保存任何内容:只发给此刻已连接的消费者
  3. persistent://acme/orders/payments: -partition-0; 0; 1; 2; 3; -partition-1; 0; 1; -partition-2; 0; 1; 2
  4. persistent://acme/orders/created: 0; 1; 2; 3; 保存在 BookKeeper ledger 中
  5. non-persistent://acme/orders/ticks: 不保存任何内容:只发给此刻已连接的消费者
  6. 生产者 由键选择分区 → persistent://acme/orders/payments: 发布
  7. 只有名字时,就是默认命名空间中的持久化主题: orders 即 persistent://public/default/orders

主题的完整名称是 {persistent|non-persistent}://tenant/namespace/topic。租户和命名空间是 Pulsar 的管理单位:权限、保留策略和其他策略都设置在它们上面。PulsarTopic 在任何 I/O 之前解析名称,像 orders 这样只有名字的写法会变成 persistent://public/default/orders。

持久化主题把每条消息写入 BookKeeper ledger。消息一直保留在那里,直到每个订阅都确认了它,之后再按命名空间的保留策略保留一段时间。非持久化主题什么也不保存:消息发给此刻已连接的消费者,之后才连接的消费者永远看不到它。

分区主题是一组名为 <topic>-partition-<n> 的内部主题,每个都是一个独立的日志,各自归集群中的一个 Broker 所有。生产者为每条消息选择分区。本 crate 的生产者用消息键的哈希选择分区,因此同一个键的消息保持顺序;没有键的消息则轮流分配到各个分区。来自分区主题的投递在它的主题名中给出分区。

生产者或消费者第一次指定某个持久化主题时,服务器就会创建它,除非集群关闭了自动创建。分区主题由管理员创建,同时指定分区数。

这个模型来自 Apache Pulsar 本身(主题、多租户、分区主题、非持久化主题)。消费者如何读取主题,见订阅。