В каком месте и как хранится топик внутри Kafka
Ответ от нейросети
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.
Пояснение кода:
Код не требуется: это архитектурный вопрос. Если разложить пример по шагам, то процесс выглядит так:
- Клиент обращается к Kafka по имени топика
orders. - Kafka по метаданным определяет, какие партиции есть у этого топика и где они размещены.
- Для каждого сообщения выбирается конкретная партиция.
- Сообщение дописывается в конец лога партиции на диске брокера.
- При чтении consumer читает данные не из “топика целиком”, а из конкретных партиций.
Ключевые моменты:
- Топик — это логическое имя, а не единый файл или таблица.
- Физическое хранение происходит на брокерах Kafka.
- Топик состоит из партиций, и каждая партиция хранится как отдельный лог на диске.
- Партиции разбиваются на сегменты, чтобы упростить хранение и очистку старых данных.
- Метаданные о топике и размещении партиций хранятся отдельно от самих сообщений.
- Чтение и запись в Kafka всегда идут через партиции, а не напрямую через топик как единый контейнер.