Какую роль выполняют топики (topics) в Apache Kafka?

«Какую роль выполняют топики (topics) в Apache Kafka?» — вопрос из категории Брокеры сообщений, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Топик (topic) в Kafka — это именованный канал или категория, в которую публикуются сообщения. Это основная абстракция для организации данных. Производители (producers) пишут в топики, а потребители (consumers) читают из них.

Ключевые функции и характеристики топиков:

  • Логическая группировка сообщений: Аналогия — таблица в БД или папка в файловой системе. Все сообщения определённого типа (например, user-events, payment-transactions) отправляются в соответствующий топик.
  • Многопоточное потребление: Топик делится на партиции (partitions). Это позволяет:
    • Масштабировать обработку: Разные партиции могут обрабатываться разными потребителями в группе.
    • Гарантировать порядок: Порядок сообщений гарантирован только в пределах одной партиции.
  • Хранение и retention: Сообщения в топике хранятся на диске в течение заданного времени или до достижения лимита размера.
  • Репликация: Каждая партиция реплицируется на несколько брокеров для отказоустойчивости.

Пример:

# Создание топика с 3 партициями и фактором репликации 2
kafka-topics --create --topic orders --partitions 3 --replication-factor 2 --bootstrap-server localhost:9092
// Producer отправляет сообщение в топик "orders"
ProducerRecord<String, Order> record = new ProducerRecord<>("orders", orderId, order);
kafkaProducer.send(record);

// Consumer подписывается на топик "orders"
kafkaConsumer.subscribe(List.of("orders"));
ConsumerRecords<String, Order> records = kafkaConsumer.poll(Duration.ofMillis(100));

Почему это важно? Топики обеспечивают decoupling (развязку) между производителями и потребителями, высокую пропускную способность за счёт партиционирования и надёжное хранение потоков данных.