Что такое топик (topic) в Apache Kafka?

«Что такое топик (topic) в Apache Kafka?» — вопрос из категории DevOps, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

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

  • Партиционирование: Каждый топик делится на одну или несколько партиций. Это основа масштабируемости Kafka: разные партиции одного топика могут размещаться на разных брокерах, позволяя параллельно записывать и читать данные.
  • Неизменяемость и порядок: Сообщения, записанные в партицию, являются неизменяемыми. Внутри одной партиции порядок сообщений гарантируется и каждое сообщение имеет уникальный, монотонно возрастающий идентификатор — offset.
  • Репликация: Каждая партиция реплицируется на несколько брокеров (задается replication-factor). Одна реплика является лидером (leader) для операций записи/чтения, остальные — последователями (followers) для отказоустойчивости.

Пример работы:

# Создание топика с 3 партициями и фактором репликации 2
kafka-topics.sh --create 
  --topic user-events 
  --partitions 3 
  --replication-factor 2 
  --bootstrap-server localhost:9092

# Запись сообщения в топик
kafka-console-producer.sh --topic user-events --bootstrap-server localhost:9092
> {"userId": 123, "action": "login"}

# Чтение сообщений с начала топика
kafka-console-consumer.sh --topic user-events --from-beginning --bootstrap-server localhost:9092

На практике мы проектируем топики вокруг бизнес-событий (например, orders, payments, user-tracking). Выбор количества партиций — это баланс между параллелизмом (больше партиций = больше параллельных потребителей) и накладными расходами.