Открыть сервисСервис

Топик — термин информационных технологий

Топик (англ. topic) — термин информационных технологий, обозначающий именованный канал обмена сообщениями в системах асинхронного взаимодействия, прежде всего в архитектуре «издатель — подписчик» (publish/subscribe). Топик выступает логической шиной, к которой издатели отправляют сообщения, а подписчики — получают их, не зная друг о друге напрямую. Термин широко применяется в системах очередей сообщений (message brokers), шинах данных (message buses), стриминговых платформах и протоколах передачи данных.

Происхождение термина

Слово «topic» в значении «тема» или «рубрика» восходит к греческому topos (τόπος) — «место». В информационных системах смысл метафоры сохранён: топик — это «место», куда складываются и откуда забираются сообщения по принадлежности к обсуждаемой теме. Термин получил распространение в конце 1990-х — начале 2000-х годов вместе с развитием middleware-систем корпоративной интеграции (IBM MQSeries,后来 Apache Kafka, RabbitMQ, NATS).

Топик в системах очередей сообщений

В классической модели «издатель — подписчик» топик является центральной абстракцией:

  • Издатель (producer) отправляет сообщение в конкретный топик, указывая его имя.
  • Подписчик (consumer) подписывается на топик и получает все (или отфильтрованные) сообщения, опубликованные в нём.
  • Брокер — промежуточное программное обеспечение, управляющее хранением и маршрутизацией сообщений по топикам.

Ключевое свойство топика — независимость участников: издатель не знает, кто и сколько подписчиков потребит сообщение, а подписчик не зависит от конкретного издателя. Это обеспечивает слабое связывание (loose coupling) компонентов распределённой системы.

Реализации в различных системах

Apache Kafka

В Apache Kafka топик — логическая сущность, разделённая на партии (partitions), каждая из которых представляет упорядоченный, неизменяемый журнал записей (log). Партии распределяются по брокерам кластера, что обеспечивает горизонтальное масштабирование. Потребители (consumer groups) читают партии независимо, координируя позицию смещения (offset). Топики в Kafka создаются с указанием числа партий и коэффициента репликации.

RabbitMQ

В RabbitMQ, построенной на протоколе AMQP, топик — это тип обмена (exchange), который маршрутизирует сообщения по шаблонам совпадения ключей (topic exchange). Ключ маршрутизации (routing key) сопоставляется с шаблоном подписки, содержащим подстановочные символы * (ровно одно слово) и # (ноль или более слов). Доставка может быть подтверждённой (acknowledged), что гарантирует надёжную обработку.

Apache Pulsar

В Apache Pulsar топики поддерживают режимы одиночной (non-partitioned) и многопартиционной (partitioned) подписки, а также семантику «exclusive», «shared», «failover» и «key_shared» для групп потребителей.

MQTT

В протоколе MQTT, применяемом в интернете вещей, топик — адрес сообщения в виде строки с иерархическими уровнями, разделёнными символом / (например, дом/кухня/температура). Подписка поддерживает подстановочные символы + (один уровень) и #` (поддерево).

NATS и NATS JetStream

В NATS топик — это имя шины (subject), по которому брокер маршрутизирует сообщения. JetStream добавляет устойчивое хранение и семантику очередей.

Системы подписки на события

Топики используются в шинах событий (event buses) и системах стриминга: Apache Flink, Apache Storm, AWS SNS/SQS, Azure Service Bus, Google Pub/Sub, Redpanda, Astra Streaming. Во всех этих системах топик играет роль именованного канала с семантикой «многие-ко-многим» или «один-ко-многим».

Топик в контексте LLM и чат-ботов

С начала 2020-х годов слово «топик» активно используется в контексте больших языковых моделей и чат-ботов: «topic detection» — определение темы диалога, «topic modeling» — автоматическая кластеризация текстов (LDA, BERTopic). В мессенджерах и голосовых роботах топик обозначает тему разговора, на которую настроен бот или сценарий диалога.

Классификация топиков

По способу хранения:

  • Временные — сообщения удаляются после доставки (AMQP, NATS core).
  • Персистентные — сообщения хранятся на диске и доступны новым подписчикам (Kafka, Pulsar, NATS JetStream).

По типу семантики:

  • Fan-out — все подписчики получают все сообщения.
  • Work queue — сообщение получает только один подписчик из группы.

См. также

  • Очередь сообщений
  • Шина данных
  • Publish/subscribe
  • Apache Kafka
  • AMQP

Литература

  • Kleppmann M. Designing Data-Intensive Applications. — O'Reilly, 2017.
  • Narkhede N., Shapira G., Palino T. Kafka: The Definitive Guide. — O'Reilly, 2017.
  • Al-Fuqaha A. et al. MQTT Protocol. — IEEE Communications Surveys & Tutorials, 2015.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru