Что такое топик в системах обмена сообщениями?

«Что такое топик в системах обмена сообщениями?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Топик (Topic) — это именованный канал или категория в системах обмена сообщениями (брокерах), таких как Apache Kafka, RabbitMQ или Apache Pulsar. Производители (Producers) публикуют сообщения в топик, а потребители (Consumers) подписываются на топик для их получения. Это реализует шаблон "публикация-подписка" (Pub/Sub).

Ключевые характеристики:

  • Логическое разделение: Каждый топик предназначен для определенного типа событий или данных (например, user-registrations, order-payments).
  • Масштабируемость: В Kafka топик делится на партиции для параллельной обработки.
  • Надежность: Сообщения в топике обычно сохраняются на диске и реплицируются.

Пример создания топика и отправки сообщения в Apache Kafka (Java):

// 1. Настройка админа для управления топиками
Properties adminProps = new Properties();
adminProps.put("bootstrap.servers", "localhost:9092");
AdminClient admin = AdminClient.create(adminProps);

// Создание топика с 3 партициями и фактором репликации 1
NewTopic newTopic = new NewTopic("order-events", 3, (short) 1);
admin.createTopics(Collections.singleton(newTopic));

// 2. Отправка сообщения продюсером
Properties producerProps = new Properties();
producerProps.put("bootstrap.servers", "localhost:9092");
producerProps.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
producerProps.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

Producer<String, String> producer = new KafkaProducer<>(producerProps);
ProducerRecord<String, String> record = new ProducerRecord<>(
    "order-events", // Имя топика
    "order-123",    // Ключ (определяет партицию)
    "{"status": "paid"}" // Значение (тело сообщения)
);
producer.send(record);
producer.close();