Включите исполнение JavaScript в браузере, чтобы запустить приложение.

Обработка и анализ данных при помощи Apache Kafka: что это такое и принципы работы архитектуры

25 авг 2024
Мы подготовили подробное руководство по Apache Kafka для начинающих. Разберем, что такое Apache Kafka, основные компоненты архитектуры и как применять в обработке и анализе данных — читайте в блоге Gitverse.ru.

Введение: краткое описание системы

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

Технология была создана в компании LinkedIn. В 2011 году разработчики выложили открытый исходный код. С тех пор платформа продолжает развиваться и поддерживается как Open Source проект в рамках фонда Apache Software Foundation. Kafka активно используется многими крупными компаниями — от LinkedIn, Microsoft, New York Times до торговых сетей. Расскажем, как она работает.

Преимущества и недостатки архитектуры Apache Kafka

Перечислим преимущества Kafka.

  1. Отказоустойчивость. Распределенная система обмена сообщениями с репликацией сообщений на разных узлах обеспечивает устойчивость даже при сбое узлов. Использование Apache ZooKeeper для координации компонентов повышает ее надежность.
  2. Масштабируемость. Apache Kafka поддерживает горизонтальное масштабирование путем простого добавления новых машин в кластеры без отключения системы, что исключает простои из-за переоборудования.
  3. Производительность. Процессы генерации, отправки, считывания сообщений происходят независимо друг от друга, позволяя тысячам приложений работать параллельно как генераторы либо потребители сообщений.
  4. Открытый исходный код. Apache Kafka распространяется под лицензией Apache Software Foundation, что обеспечивает доступ к обширной справочной информации, программным пакетам и гибким настройкам.
  5. Безопасность. В Kafka имеются инструменты для поддержки безопасности данных — например, уровень изоляции транзакций, возможность отслеживания изменений в режиме онлайн.
  6. Долговечность. Данные в Kafka сохраняются на долговременных хранилищах, и их распределенное хранение обеспечивает доступность даже при сбоях узлов.
  7. Интегрируемость. С помощью протокола на базе TCP и фреймворка Kafka Connect, Kafka интегрируется с различными протоколами передачи данных и хранилищами.

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

Основы работы и компоненты Kafka

Архитектуру Kafka вкратце можно описать следующим образом:

  • распределенность — компоненты размещены на разных физических платформах (кластерах), что обеспечивает высокую устойчивость к отказам.
  • масштабируемость — систему можно легко масштабировать за счет добавления новых узлов (брокеров сообщений).

Исследуем структуру Kafka и взаимодействие ее основных компонентов между собой.

Topic

Топик — поток сообщений, связанный с той или иной категорией либо названием канала. Хранение данных в Kafka осуществляется за счет топиков: продюсеры записывают в них данные, а потребители получают возможность их читать.

Broker

Каждый кластер Apache Kafka включает в себя один либо несколько серверов, которые называются брокерами. Они действуют как контейнеры, способные содержать различные топики с их разделениями. У каждого брокера есть свой уникальный идентификатор. Подключаясь к одному из брокеров, пользователь подключается ко всему кластеру автоматически.

Producer

Производители (Producers) передают данные в кластер Apache Kafka, отправляя сообщения в топики.

Consumer and Consumer Group

Группа потребителей (GroupConsumers) в Apache Kafka считывает информацию из кластера, получая данные для чтения от брокера. Несколько потребителей объединяются в группу так, что каждый из них может читать определенную часть сообщений в соответствующем топике.

Partition

В Apache Kafka любой из топиков разделяется на конфигурируемое число частей — так называемых partitions. Каждая из них распределяет данные топика по разным брокерам, что помогает снизить нагрузку на серверы. Потребители (Consumers), как уже говорилось, могут объединяться в группы потребителей (consumer groups). Это позволяет каждому потребителю получать сообщения только из определенных partitions, а не из всего топика сразу. А это, в свою очередь, способствует равномерному распределению нагрузки.

Partition Offset 

В системе Apache Kafka каждое сообщение или запись привязано к конкретной partition. У каждой из записей есть свое уникальное числовое значение — offset. Оно служит для определения ее позиции в partition. Каждая из записей идентифицируется однозначно внутри своего partition. Идентификатором служит параметр offset в рамках partition. Чем старше запись, тем этот параметр меньше, так как все новые записи стоят в конце.

Replicas

Реплики в системе представляют собой аналог резервной копии partition. Они предназначены для защиты данных от потерь при отключении системы или в случае внепланового сбоя. Они располагаются на разных серверах в рамках кластера.

Упрощенно, работа с Apache Kafka выглядит так:

  • продюсер создает сообщение и отправляет его в Kafka.
  • брокер сохраняет сообщение в топике, на который подписаны потребители.
  • потребитель запрашивает данные из топика по необходимости.

Аналоги Apache Kafka

Существует несколько решений, широко используемых для работы с Big Data и аналогичных Apache Kafka по функциям. Рассмотрим основные.

RabbitMQ. Популярный в больших системах брокер сообщений, который действует как посредник при обмене информацией между различными системами, осуществляя передачу сообщений через очереди. Основой RabbitMQ является протокол AMQP (Advanced Message Queuing Protocol).

Apache ActiveMQ. Open Source брокер сообщений, распространяемый под лицензией Apache 2.0. ActiveMQ реализует спецификации Jakarta 3.1, JMS 2.0 и JMS 1.1, обладая такими способностями, как кластеризация, кэширование и ведение журналов, поддержка различных СУБД для хранения сообщений.

IBM MQ — программное обеспечение для обмена сообщениями, которое предоставляет полное решение для соединения с разными системами, приложениями, службами. Оно способно передавать данные разных типов в виде сообщений, что помогает предприятиям создавать гибкие архитектуры с возможностью повторного применения.Apache Pulsar — распределенная облачная платформа, используемая для быстрого обмена сообщениями между серверами и стриминговой передачей данных. Способна обрабатывать сотни миллиардов событий ежедневно. Она гарантирует доставку сообщений, предоставляя бессерверную легковесную вычислительную среду для стриминговой обработки данных.

Сферы применения Apache Kafka

Система Kafka является эффективным инструментом для организации работы серверных проектов на любом уровне. В силу гибкости, масштабируемости, отказоустойчивости она распространена в разных областях ИT-индустрии, от потоковых видеосервисов до аналитики Big Data.

В основном это решение применяется для следующих целей:

  1. Связь микросервисов: Kafka служит связующим звеном между отдельными функциональными модулями крупной системы. Например, можно подписать микросервисы на другие компоненты для регулярного получения обновлений.
  2. Потоковая передача данных: высокая пропускная способность системы позволяет обрабатывать непрерывные потоки информации. Благодаря эффективной маршрутизации Kafka надежно передает данные и одновременно обеспечивает возможность проведения с ними различных операций.
  3. Ведение журнала событий: система структурирует данные в хронологическом порядке, что обеспечивает возможность отслеживания времени событий. Информация сохраняется на определенный период времени, что может быть использовано для разгрузки баз данных или оптимизации систем логирования.

Изначально платформа была создана командой LinkedIn для внутреннего использования, включая обмен данных между сервисами, репликацию баз данных, потоковую передачу информации об активности и операционных показателях приложений. Эта отказоустойчивая система применяется везде, где ведется обработка больших объемов неструктурированных данных. Организации почти во всех отраслях — от ИT и геймдева до государственного управления, здравоохранения и розничной торговли — воспринимают ее как неотъемлемый элемент своей работы.