Apache Kafka: Топики и партиции — полное руководство

Структура хранения сообщений в брокерах Kafka определяется топиками и партициями.

Хранение топиков на брокерах

Каждый топик может быть распределен по нескольким брокерам Kafka-кластера. Например, топик A может находиться на брокерах 0 и 1, топик B — на брокерах 1, 2 и 3, а топик C — только на брокере 2. (ZooKeeper, необходимый для работы брокеров, на схеме опущен для упрощения.)

Распределение топика по нескольким брокерам обеспечивает отказоустойчивость. Если брокер 2 выйдет из строя, топик C станет недоступен. Однако, если топик A находится на брокерах 0 и 1, выход из строя брокера 0 не повлияет на доступность топика A через брокер 1.

Партиции: Распределение сообщений

Для распределения сообщений внутри топика используются партиции.

  • Топик A имеет две партиции (0 и 1), расположенные на брокерах 0 и 1 соответственно.
  • Топик B имеет три партиции (0, 1 и 2), расположенные на брокерах 1, 2 и 3 соответственно.
  • Топик C имеет одну партицию (0), расположенную на брокере 2.
  • Топик D имеет две партиции (0 и 1), расположенные на одном брокере (0).

Топики могут содержать сотни партиций, распределенных по множеству брокеров.

Цель использования партиций

Запись каждого сообщения в файл на жестком диске занимает время. Одновременная запись большого количества сообщений от множества производителей может привести к перегрузке одного брокера. Использование множества партиций, распределенных по разным брокерам, значительно повышает производительность записи и чтения.

Аналогично, чтение данных из одной партиции (например, топик C, партиция 0) тысячей потребителей может перегрузить брокер. Распределение топика по множеству партиций на разных брокерах решает эту проблему.

Партиции также обеспечивают отказоустойчивость. Даже если брокер 0 выйдет из строя, топик A останется доступен через брокер 1. Заметим, что несколько партиций одного топика могут находиться на одном брокере (как в примере с топиком D).

Распределение сообщений по партициям

Дальнейшее описание процесса распределения сообщений по партициям производителями будет дано в следующей части.

Что будем искать? Например,программа