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

Можете объяснить концепцию разделения данных в Kafka и как оно реализовано?

Компании, где спрашивали
IT OneIT One
ЛанитЛанит

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

sobes.tech AI

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

Нужно показать понимание, что Kafka масштабируется за счёт партиций, а не одной очереди на весь топик. Важно объяснить, что запись в одну партицию сохраняет порядок, а между партициями порядок не гарантируется. Также ожидают понимание, как продюсер выбирает партицию и зачем это нужно для параллельной обработки.

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

Разделение данных в Kafka — это разбиение топика на несколько партиций. Каждая партиция представляет собой упорядоченный журнал сообщений, куда записи добавляются только в конец. Это позволяет распределять нагрузку между брокерами и consumer’ами, а также сохранять порядок сообщений внутри одной партиции.

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

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

Допустим, есть топик orders для заказов интернет-магазина. Чтобы все события по одному заказу обрабатывались последовательно, в качестве ключа сообщения используют orderId. Тогда все сообщения одного заказа попадут в одну и ту же партицию, а разные заказы смогут обрабатываться параллельно.

ProducerRecord<String, String> record =
        new ProducerRecord<>("orders", "order-123", "{\"status\":\"CREATED\"}");

producer.send(record);

В этом примере Kafka по ключу order-123 выберет партицию. Если ключ одинаковый, сообщения обычно будут попадать в одну и ту же партицию, что помогает сохранить порядок обработки для конкретного заказа.

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

  1. Создаётся сообщение для топика orders.
  2. В качестве ключа задаётся order-123.
  3. Значение сообщения содержит полезную нагрузку, например JSON с состоянием заказа.
  4. При отправке Kafka использует ключ, чтобы определить партицию.
  5. Если у всех событий одного заказа одинаковый ключ, они будут записаны в одну партицию и прочитаны в том же порядке.

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

  • Топик в Kafka состоит из одной или нескольких партиций.
  • Внутри партиции порядок сообщений сохраняется, между партициями — нет.
  • Партиции нужны для масштабирования записи, чтения и хранения данных.
  • Ключ сообщения обычно влияет на выбор партиции.
  • Consumer group распределяет партиции между consumer’ами, поэтому одна партиция одновременно читается только одним consumer’ом из группы.
  • Число партиций влияет на параллелизм, но слишком большое значение усложняет управление и может увеличить накладные расходы.