Перейти к основному содержимому
Нормативная версия документации - английская

Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.

Топики

Топик Pulsar находится в пространстве имён, которое принадлежит арендатору (tenant). Персистентный топик хранит свои сообщения в BookKeeper, а партиционированный топик - это по одному топику на партицию.

Арендатор содержит пространство имён, в пространстве имён лежат партиционированный, персистентный и неперсистентный топики, а продюсер публикует в партиционированныйАрендатор acmeПространство имён acme/orderspersistent://acme/orders/paymentspersistent://acme/orders/creatednon-persistent://acme/orders/ticksПродюсерключ выбирает партицию-partition-00123-partition-101-partition-20120123хранится вледжерах BookKeeperничего не хранится: только текущим консьюмерамКороткое имя - персистентный топик в public/default: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; ничего не хранится: только текущим консьюмерам
  2. Пространство имён acme/orders: -partition-0; 0; 1; 2; 3; -partition-1; 0; 1; -partition-2; 0; 1; 2; 0; 1; 2; 3; хранится в леджерах BookKeeper; ничего не хранится: только текущим консьюмерам
  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
  5. non-persistent://acme/orders/ticks: ничего не хранится: только текущим консьюмерам
  6. Продюсер ключ выбирает партицию → persistent://acme/orders/payments: публикует
  7. Короткое имя - персистентный топик в public/default: orders означает persistent://public/default/orders

Полное имя топика - {persistent|non-persistent}://tenant/namespace/topic. Арендаторы и пространства имён - единицы администрирования Pulsar: права доступа, политика хранения и другие политики задаются на них. PulsarTopic разбирает имя до любого ввода-вывода, а короткое имя, например orders, превращается в persistent://public/default/orders.

Персистентный топик записывает каждое сообщение в леджеры (ledgers) BookKeeper. Сообщение хранится там, пока его не подтвердит каждая подписка, а затем столько, сколько требует политика хранения пространства имён. Неперсистентный топик ничего не хранит: сообщение уходит консьюмерам, подключённым в этот момент, и консьюмер, который подключится позже, его не увидит.

Партиционированный топик - это набор внутренних топиков с именами <topic>-partition-<n>. Каждый из них - отдельный журнал, и каждым владеет один брокер кластера. Партицию для каждого сообщения выбирает продюсер. Продюсеры этого крейта выбирают партицию по хешу ключа сообщения, поэтому сообщения одного ключа сохраняют порядок, а сообщения без ключа распределяют по партициям по кругу. Доставка из партиционированного топика сообщает партицию в имени топика.

Сервер создаёт персистентный топик, когда продюсер или консьюмер впервые его называет, если автоматическое создание в кластере не выключено. Партиционированный топик вместе с числом партиций создаёт администратор.

Эта модель взята у самого Apache Pulsar (топики, мультиарендность, партиционированные топики, неперсистентные топики). Как консьюмеры читают топик, показывает страница Подписки.