Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Что такое Apache Kafka: как устроен и работает брокер сообщений

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
04 августа 2022 г.
1977
6 минут чтения
Средний рейтинг статьи: 3

Перенаправление Ввода Вывода В Linux (ubuntu) (2)

В сложных программных комплексах, состоящих из большого количества компонентов, встает вопрос организации обмена информацией между этими компонентами. Участников обмена информацией как правило разделяют на отправителей (producer) некоторого сообщения и его получателей (consumer). Если отправителей и получателей мало, то можно установить прямую связь между каждым из участников обмена данными. Но когда количество участников увеличивается и требуется более высокая интерактивность, такой способ обмена информацией становится неэффективным. 

В этом случае между теми, кто отправляет и получает данные, целесообразно использование посредника, управляющего процессом обмена информацией — брокера сообщений

Для чего нужен брокер сообщений

  • Обеспечение обмена информацией между отправителем и получателем.
  • Маршрутизация сообщений. 
  • Хранение сообщений.
  • Разбиение сообщений и последующее агрегирование.

Работу брокеров сообщений мы рассмотрим на примере одного из наиболее популярных инструментов — Apache Kafka.

Apache Kafka разработан в компании Linkedin, а затем стал open-source продуктом в составе Apache Foundation. Оптимизированная для записи больших объёмов данных программа своим оригинальным названием обязана фамилии любимого писателя главного разработчика - Франца Кафки. Основное преимущество брокера сообщений Kafka в том, что это платформа потока событий, обладающая исключительной производительностью в системах непрерывного и высокоскоростного обмена информацией, будь то интеграция данных из большого количества источников, их потоковая аналитика, либо же любая иная система, непрерывная работа которой становится критически важной для бизнеса или организации. Подобные приложения приходится часто использовать в работе с облачными платформами, такими как Timeweb Cloud

Как работает брокер сообщений Kafka 

Отправители формируют сообщения и передают их брокеру. После этого программа раскладывает полученные сообщения по отдельным топикам (topics) в соответствии с потребностями получателей, а затем получатели забирают необходимые в данный момент данные. При этом отправители и получатели непосредственно друг с другом никак не связаны и общаются только с брокером по API. Благодаря этому легко реализуется обмен информацией между произвольными комбинациями отправителей и получателей. Важно отметить, что получатели сами должны делать запрос у брокера (pull). Этим брокер сообщений Kafka отличается от другого распространенного брокера RabbitMQ, который сам отправляет сообщения получателям (push). 

Image1

Схема работы Apache Kafka

Основные составляющие брокера сообщений Kafka

  1. Брокер (сервер, узел). Используется для получения, хранения и отправки сообщений. Система масштабируема, поэтому может иметь много брокеров, объединенных в кластер. Для хранения состояния и конфигурации кластера Kafka использует инструмент Zookeeper. Также с помощью Zookeeper выбирается основной брокер (Controller), обеспечивающий консистентность данных. 
  2. Сообщение представляет из себя пару «ключ - значение». Ключ опционален и используется чтобы распределять сообщения по кластеру, а значение — это содержимое сообщения. Помимо этого, каждый отдельный элемент содержит поле timestamp, то есть время в формате Unix, устанавливаемое при отправке или обработке сообщения на кластере. Опциональным является поле headers с дополнительными пользовательскими атрибутами сообщения.
  3. Топик и партиция (partition). Топик — это набор событий, объединенных по некоторому логическому принципу. В нём формируется очередь из получаемых от отправителей сообщений, и отсюда же данные извлекаются получателями. Кafka работает по принципу FIFO: сообщения доставляются получателям сохраняя тот же порядок, в котором были получены от отправителей. Информация не пропадает из топика после прочтения получателями. 

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

Топики хранят сообщения в лог-файлах. Каждое сообщение имеет timestamp, порядковый номер (offset) и позицию (position) в байтах от начала файла. Это позволяет читать сообщения, начиная с определенного номера или даты/времени, что выгодно отличает Kafka от другого популярного брокера сообщений ActiveMQ, не обладающего таким функционалом. Каждый лог-файл тоже имеет свой порядковый номер. При достижении лог-файлом заданного в настройках размера запись в этот файл прекращается, и последующие сообщения пишутся в новый лог-файл со следующим по порядку номером. Отдельные лог-файлы называются сегментами. Kafka поддерживает только операции чтения и записи сообщений, но не удаления. Удалять данные можно с помощью настройки времени жизни (TTL, time-to-live) сегментов. Этот способ даёт возможность не хранить дольше заданного времени целые сегменты, отдельные же элементы удалить не получится даже так.

Отказоустойчивость обеспечивается репликацией партиций по всем брокерам в задаваемом в настройках количестве. Выход из строя любого узла при этом не приводит к потере данных. Более того, в этом случае Kafka добавляет копии партиций, хранящихся на неактивном брокере, на работающие, чтобы обеспечить требуемый фактор репликации. При репликации основной брокер назначает одну из партиций ведущей (Leader). Операции чтения и записи осуществляются через ведущую партицию.  

Преимущества Kafka

  • Распределенность: комплекс предназначен для работы на множестве серверов.
  • Отказоустойчивость: выход из строя одного из функциональных узлов не помеха непрерывной работе.
  • Согласованность и доступность: данные в системе непротиворечивы и в любой момент могут быть получены в результате запроса.
  • Высокая производительность: возможность реализовать кластеры, обрабатывающие миллионы сообщений в секунду.
  • Горизонтальная масштабируемость: при необходимости можно добавить в имеющуюся структуру дополнительный узел.

Брокер сообщений Apache Kafka оказался очень удачным инструментом для работы на облачных серверах, с единственным недостатком — ориентированностью на обработку больших объемов данных. Однако, по мере развития Kafka это различие стало менее заметным, а сама система — более гибкой и универсальной. 

В своем официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.  

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону