Sobes.tech
Назад к вопросам
Junior — Middle
51

В каком месте и как хранится топик внутри Kafka

Компании, где спрашивали
Prooftech
ТОП КЕЙС
А Деньги

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Топик в Kafka не хранится как отдельный “объект” в одном месте. Он логически существует в метаданных кластера, а физически представлен набором партиций на дисках брокеров. Каждый топик разбит на партиции, и уже партиции распределяются между брокерами и хранятся в виде логов на файловой системе.

Определение:

Топик в Kafka — это логическое имя потока сообщений, под которым объединены одна или несколько партиций. Физически данные топика хранятся на брокерах Kafka в виде append-only логов: каждая партиция — это отдельный журнал на диске, разбитый на сегменты. Информация о том, где находятся партиции и кто является лидером, хранится в метаданных кластера и управляется контроллером/координатором кластера.

Пример использования:

Например, топик orders может состоять из 3 партиций, распределённых по 3 брокерам. Продюсер пишет сообщение в orders, Kafka по ключу или по round-robin выбирает партицию, а запись физически попадает в лог конкретного брокера.

Topic: orders
Partition 0 -> Broker 1
Partition 1 -> Broker 2
Partition 2 -> Broker 3

Если в партицию 1 пишется новое сообщение, оно просто дописывается в конец её файла-журнала на брокере 2.

Пояснение кода:

Код не требуется: это архитектурный вопрос. Если разложить пример по шагам, то процесс выглядит так:

  1. Клиент обращается к Kafka по имени топика orders.
  2. Kafka по метаданным определяет, какие партиции есть у этого топика и где они размещены.
  3. Для каждого сообщения выбирается конкретная партиция.
  4. Сообщение дописывается в конец лога партиции на диске брокера.
  5. При чтении consumer читает данные не из “топика целиком”, а из конкретных партиций.

Ключевые моменты:

  • Топик — это логическое имя, а не единый файл или таблица.
  • Физическое хранение происходит на брокерах Kafka.
  • Топик состоит из партиций, и каждая партиция хранится как отдельный лог на диске.
  • Партиции разбиваются на сегменты, чтобы упростить хранение и очистку старых данных.
  • Метаданные о топике и размещении партиций хранятся отдельно от самих сообщений.
  • Чтение и запись в Kafka всегда идут через партиции, а не напрямую через топик как единый контейнер.