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

Ответ

Брокер в 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 и предоставляет метаданные о кластере.

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

Ответ 18+ 🔞

Давай разберёмся, что за зверь такой этот брокер в Кафке, а то некоторые думают, что это какой-то маклер в пиджаке, который кричит "продаю! покупаю!". Нихуя подобного.

Представь себе кластер Кафки — это типа складской комплекс, огромный такой. А брокер — это один конкретный складской ангар в этом комплексе. Просто сервер, сука. Но не простой, а очень даже занятой.

Чем этот ангар-брокер занимается, спросишь ты? А вот чем, блядь:

  1. Тащит на себе партиции. Внутри него лежат куски данных (партиции) от разных топиков. Не все, конечно, а свои. Как в нормальном распределённом хранилище и должно быть.
  2. Работает ломовой лошадью. К нему приходят грузчики (продюсеры) и кричат "держи, записывай!". А потом приходят кладовщики (консьюмеры) и орут "давай, выдавай, читай!". И он всем отвечает. Мужик-работяга, епта.
  3. Делает копии, чтобы не было мучительно больно. У него там не один экземпляр данных валяется. Для надёжности он с другими брокерами договаривается: "Я, Петрович, за главного по этой партиции (лидер), а вы, Васёк и Кольян, держите у себя копии (фолловеры)". Если Петровича током шарахнет — Васёк сразу станет главным. Отказоустойчивость, мать его.
  4. Может стать "главным по тарелочкам". Один из брокеров в кластере ещё и контроллером работает — следит, чтобы все метаданные были в порядке и лидеры правильно выбирались. Работа нервная, зато почётная.

Вот смотри, как он обычно настраивается, этот брокер (server.properties):

# Его паспорт, ID. Чтобы в кластере не путать, кто есть ху.
broker.id=1
# Адрес, куда стучаться. Типа "я на таком-то порту вишу, заходите".
listeners=PLAINTEXT://:9092
# Где у него на жёстком диске бардак (данные) лежит. Может, даже в нескольких местах.
log.dirs=/var/lib/kafka/data
# Сколько полок (партиций) по умолчанию делать в новых топиках.
num.partitions=3
# И сколько копий каждой коробки на этих полках на других складах держать.
default.replication.factor=2

А как они, блядь, вместе работают? Несколько таких брокеров-ангаров собираются в кластер. Чтобы не передрались и знали, кто где что лежит, им нужен координатор — ZooKeeper (или его современный аналог KRaft, который прямо внутри Кафки живёт).

И когда клиент (продюсер или консьюмер) приходит, он тыкается в первого попавшегося брокера (bootstrap server). Тот такой: "О, новенький! Держи, дружок, схему всего кластера — кто где стоит и что хранит. А теперь иди работай уже с тем, кто нужен".

И почему это, блядь, так важно? Да потому что это и есть вся архитектура, ёпта! Вместо одного здоровенного, но уязвимого сервака (который может лечь и всем пиздец) — у тебя целая сеть таких брокеров. Можно добавлять новые ангары (горизонтально масштабироваться), можно выключать старые на обслуживание, и данные не пропадут. Всё ради того, чтобы твои потоковые данные текли рекой, а не высыхали лужицей при первой же проблеме. Вот и вся магия, сука.