Вопрос проверяет понимание базовой сущности Kafka — топика — и того, как физически и логически организовано хранение сообщений.
Топик в Kafka — это логический «канал», куда продюсеры пишут сообщения, а консьюмеры читают. Внутри топик разделён на партиции, которые позволяют масштабировать запись и чтение. Каждая партиция — это упорядоченный лог сообщений. Для надёжности партиции могут иметь реплики на разных брокерах. Настройки топика определяют, сколько хранить данные и как их очищать.
Топик — это центральная концепция Kafka, через которую организуют потоки данных. Однако «топик» — это не один файл и не одна очередь, а набор частей, которые вместе дают масштабирование и надёжность.
Topic — это логическое имя потока сообщений в Kafka, которое объединяет набор партиций и их реплик.
С точки зрения устройства Kafka у топика обычно есть несколько ключевых составляющих.
Топик разбивается на partition:
каждая партиция — независимый упорядоченный лог;
внутри партиции сообщения имеют offset (0, 1, 2, ...);
параллелизм достигается за счёт нескольких партиций.
Почему это важно:
один консьюмер читает партицию последовательно;
несколько консьюмеров могут читать разные партиции параллельно.
Для каждой партиции Kafka хранит копии на разных брокерах.
Есть leader партиции:
принимает запись;
обслуживает чтение (в типовом режиме).
Есть followers:
копируют данные с лидера;
могут стать лидером при сбое.
Зачем это нужно:
если брокер падает, данные не теряются (при нормальной репликации);
кластер может продолжать работать.
Топик имеет настройки, влияющие на поведение:
сколько хранить сообщения;
как очищать;
сколько партиций и реплик.
Даже если никто не читает сообщения, Kafka может хранить их по правилам retention.
Kafka хранит метаданные:
какие брокеры держат какие партиции;
где лидер, где реплики;
какие ISR (in-sync replicas) сейчас «в строю».
Это важно для балансировки и автоматического фейловера.
Топики обычно проектируют по смыслу событий:
orders — события заказов;
payments — события оплаты;
user_events — клики/просмотры.
Один и тот же топик могут читать разные consumer group:
одна группа делает бизнес-обработку;
другая пишет в аналитику;
третья делает мониторинг/алерты.
Это сильная сторона Kafka: данные можно переиспользовать без изменения продюсера.
Если вы отправляете сообщения с ключом:
Kafka стабильно кладёт одинаковый ключ в одну партицию (в типовой схеме).
Это значит:
для одного user_id или order_id вы сохраните порядок обработки.
Пример отправки с ключом:
producer.send("orders", key=b"order-123", value=b"created")
Перед завершением полезно знать частые проблемы:
нельзя распараллелить обработку;
consumer group не масштабируется.
растёт нагрузка на метаданные и управление;
сложнее ребалансы и мониторинг.
Если в одном топике смешать «заказы» и «платежи», потом сложнее:
поддерживать схему сообщений;
масштабировать обработку;
управлять retention.
Топик — это логическое имя потока, но реально он состоит из партиций (масштабирование) и реплик (надёжность), плюс конфигурации хранения. Хорошая практика — проектировать топики по смыслу доменных событий и подбирать число партиций под ожидаемый параллелизм.