Какую роль выполняет брокер в Apache Kafka?

«Какую роль выполняет брокер в Apache Kafka?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Брокер в Apache Kafka — это отдельный сервер (нода) в кластере, который отвечает за хранение, запись и чтение данных (сообщений). Каждый брокер идентифицируется уникальным целочисленным ID и является основным исполнительным компонентом кластера.

Основные функции брокера:

  1. Хранение партиций топиков: Каждый брокер хранит одну или несколько партиций (сегментов данных) для различных топиков.
  2. Обработка запросов: Принимает запросы на запись (produce) от продюсеров и на чтение (fetch) от консьюмеров.
  3. Репликация: Управляет репликами партиций для обеспечения отказоустойчивости (один брокер — лидер партиции, другие — followers).
  4. Участие в контроллере: Один из брокеров в кластере выполняет роль контроллера, управляя метаданными и выборами лидера.

Пример базовой конфигурации брокера (server.properties):

# Уникальный идентификатор брокера в кластере
broker.id=1
# Адрес и порт для подключения клиентов
listeners=PLAINTEXT://:9092
# Директории для хранения логов (данных) партиций
log.dirs=/var/lib/kafka/data
# Количество партиций по умолчанию для новых топиков
num.partitions=3
# Коэффициент репликации по умолчанию
default.replication.factor=2

Как брокеры образуют кластер:

  • Несколько брокеров (нод) объединяются в кластер.
  • Для координации они используют Apache ZooKeeper (или встроенный KRaft в новых версиях).
  • Клиенты (продюсеры/консьюмеры) подключаются к любому работающему брокеру, который выступает в роли bootstrap server и предоставляет метаданные о кластере.

Почему это важно для архитектуры: Брокеры обеспечивают распределённое, горизонтально масштабируемое и отказоустойчивое хранилище для потоков данных.