Apache Kafka — это распределенный программный брокер сообщений. Его ключевая задача заключается в
сборе данных у приложений и их хранении в распределенном хранилище (из-за чего Kafka
нередко называют гибридом брокера и СУБД). Сегодня разберем, зачем вообще нужен Apache
Kafka и какую роль он играет в проектах, связанных с большими данными.
![dreamstime_xxl_122583170.jpg dreamstime_xxl_122583170.jpg](/upload/medialibrary/08f/t0eab1pxabl78n1qyr1a1hvqz3b1xsms/dreamstime_xxl_122583170.jpg)
Ключевые возможности Apache Kafka
Apache Kafka позволяет в онлайн-режиме собирать и обрабатывать множество типов данных, например:
- поведение посетителя веб-сайта или приложения;
- данные с устройств интернета вещей (Internet of Things, IoT) и IIoT;
- агрегация журналов работы приложений;
- агрегация статистики из распределенных приложения для витрин данных (data mart);
- журналирование событий.
Наиболее примечательный кейс применения Kafka — постоянная передача данных с устройств интернета вещей и их обработка сразу большим количеством клиентов (их также называют подписчиками или в англоязычной терминологии — consumers). Если число подписчиков меньше, чем число издателей, которые и являются источниками передаваемых данных, в ход идут отложенные вычисления. Сообщения от издателей записываются по соответствующим разделам темы, где будут храниться определенное время. Консьюмеры самостоятельно опрашивают Apache Kafka о наличии новых сообщений (messages) и определяют, какие сообщения им необходимо прочесть.
Говоря простыми словами, ключевая задача, которую решает Kafka — организация потока данных из одной точки в другую и их опциональная обработка. Он может работать с разными видами событий — метрики, логи, данные систем мониторинга и другое.
Apache Kafka позволяет существенно упростить архитектуру, сконцентрировав все сервисы вокруг лога. Например, вот так сервисы, системы и хранилища могли обмениваться данными раньше:
![30_1.png 30_1.png](/upload/medialibrary/dd0/5ce6xyexqjz870k9ltl6gd05cnbiysq6/30_1.png)
А вот так их взаимодействие выглядит с Apache Kafka:
![30_2.png 30_2.png](/upload/medialibrary/73f/9ug8lwrl9635rpbknhtx4q0qlb79ikol/30_2.png)
Преимущество такой архитектуры — в возможностях ее децентрализации. Она не предполагает сильную связанность сервисов и позволяет, например, вынести в облако только их часть, не беспокоясь о полной миграции.
![30_3.png 30_3.png](/upload/medialibrary/5c3/1dldtndto5tf1dqvxvqborb0i7oq83mx/30_3.png)
Сценарии использования Apache Kafka
Вот так можно использовать брокер сообщений в реальных ситуациях.
Мониторинг активности посетителей веб-ресурса
Kafka можно использовать для «подписки» на потоки данных от различных генераторов событий. После внедрения инструмента все действия пользователей сайта (посещение страниц, клики по кнопкам, использование поиска и пр.) будут публиковаться в центральных топиках, причем каждый тип действий — в своем. Получившиеся фиды можно использовать совершенно по-разному: например, обрабатывать real-time, загружать в Hadoop или хранилища.
Обнаружение фрода
С помощью Apache Kafka можно строить сервисы выявления мошеннических или подозрительных действий. В этом случае его применяют на этапе сбора потоковых данных: в Kafka поступает информация от различных генераторов, например, сервисов онлайн-банкинга, а брокер передает эти данные в Spark, где они обрабатываются в режиме real-time.
![30_4.png 30_4.png](/upload/medialibrary/2c7/frvtcgwk9hj3l27fziczs9oi5bdm0wji/30_4.png)
Обработка логов игровых приложений
Игры генерируют огромное количество логов, которые затем хранятся в виде обычных файлов на физических серверах или ВМ. В связке с Apache Kafka эти ВМ могут выступать поставщиками данных, которые публикуют логи на брокере, откуда они уже передаются в обработку. Это позволяет работать не с разрозненными файлами, а сразу с потоком данных, которые можно транслировать, агрегировать, хранить и передавать на аналитику. Поскольку Apache Kafka отлично масштабируется и быстро работает, его можно использовать для загрузки данных в обработку в онлайн-режиме.
![30_5.png 30_5.png](/upload/medialibrary/de7/kr8rmtrnfyv1n0tau7n5miwmiytdtgq8/30_5.png)
Бэкенд для архитектурной модели Event Sourcing
Event Sourcing — это архитектурный шаблон разработки приложений, согласно которому любые изменения состояния регистрируются в виде некой последовательности записей. Так как Apache Kafka умеет работать с «тяжелыми» логами, его можно использовать как бэкенд для приложений с применением Event Sourcing.
Анализ временных рядов
Kafka можно использовать не только для real-time данных — он отлично подходит для анализа информации, собранной в разное время. С его помощью можно проанализировать данные за циклически повторяющиеся моменты времени (за один и тот же сезон в разные годы, за все выходные и пр.) и, например, зафиксировать снижение спроса. При этом Kafka может получать данные из разных временных рядов, а затем передавать их в ML-приложения, корпоративные DWH, ETL-системы и другие сервисы.
![30_6.png 30_6.png](/upload/medialibrary/e00/357n7d06du1d6l1lz07ko5af0wv3w5n6/30_6.png)
Если вы хотите ощутить пользу machine learning, но не планируете строить вычислительную платформу самостоятельно, рекомендуем наши производительные облачные сервисы:
- GPU SuperCloud — прост в использовании, как обычное публичное облако, но готов дать вам всю мощь графических ускорителей NVIDIA Tesla V100.
- MLOps Platform — платформа автоматизации процесса разработки и управления жизненным циклом проектов ML/AI с готовыми инструментами (TensorFlow, PyTorch, TensorBoard, NNI Jupiter Notebook и другими).