Анализ данных   •  10 июля  2023  •  5 мин чтения

Почтальон в мире IT: для чего нужен брокер сообщений Apache Kafka и как он устроен

В сложных распределённых IT-системах разные компоненты постоянно обмениваются сообщениями. Брокеры сообщений нужны, чтобы контролировать этот обмен, — и Apache Kafka один из них.

Что такое Apache Kafka

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

Платформу разработали в 2010 году инженеры компании LinkedIn. Они столкнулись с проблемой обработки и передачи большого объёма данных в режиме реального времени. Сервисы, которые в целом умели это делать, существовали, но не справлялись с огромными объёмами данных.

Изначально Kafka разрабатывали как систему для внутреннего пользования, но потом выпустили её на широкий рынок. Постепенно она завоевала популярность благодаря своей масштабируемости, высокой пропускной способности и устойчивости к отказам. И в 2012 году её передали компании Apache Software Foundation. Так платформа превратилась в Apache Kafka, которая со временем стала одним из самых популярных инструментов для обработки потоков данных в реальном времени. Сейчас она используется во многих отраслях: электронной коммерции, банковском деле, телекоммуникации и других.

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

Представим систему, в которой один или несколько участников генерируют сообщения, а другие — их получают. Apache Kafka называет того, кто генерирует и передает сообщения, издателем, или producer. А того, кто принимает, — подписчиком, или consumer.

Чтобы объединить издателей и подписчиков, Kafka создает отдельные каналы, которые называются темами. Издатели отправляют сообщения в конкретные темы, а подписчики следят за определёнными темами. Как только в теме появляется новое сообщение, его получают все подписанные на неё адресаты.

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

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

Так выглядит упрощённая схема распределения данных с помощью Apache Kafka. Издатели отправляют сообщения, Kafka распределяет их по темам и разделам, а потом отправляет подписчикам в зависимости от того, на какую тему каждый подписан и какой раздел читает
При больших объёмах данных возрастает риск потери отдельных сообщений, а для многих систем это может быть критично. Поэтому брокер сообщений Apache Kafka дублирует разделы: создает одного «лидера» и нескольких «подчинённых». Лидер работает с издателями и подписчиками, а подчинённые просто сохраняют всё, что находится на лидере, ― служат репликами. Это гарантирует сохранность данных, даже если лидер откажет, а также позволит системе продолжать работу.
Если основной раздел откажет, реплика автоматически возьмёт на себя его функции и сможет принимать и доставлять сообщения
Рассмотрим, как работает брокер сообщений Apache Kafka, на примере интернет-магазина с функциями поиска товара, оформления заказа, отправки клиентам уведомлений, которые соединены Apache Kafka.

Когда в системе появляется новый товар, сервис отправки уведомлений обращается к Apache Kafka и отправляет об этом сообщение в тему «Новые товары». Сервис оформления заказа и сервис поиска товаров подписаны на эту тему, поэтому сразу получают это сообщение и добавляют новый товар к себе.

Когда клиент что-то покупает, сервис оформления заказа отправляет сообщение в тему «Новые заказы». И уведомление о нём получат все, кто подписан на эту тему.

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

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

Существуют и другие брокеры сообщений, однако у Apache Kafka есть перед ними несколько преимуществ:

Масштабируемость. В Kafka можно легко добавлять дополнительные разделы, чтобы увеличивать пропускную способность системы и обрабатывать больше запросов. Это особенно полезно для систем, которые быстро растут или подвержены резким всплескам нагрузки — например, при распродажах в «Чёрную пятницу».

Благодаря масштабируемости Apache Kafka отлично подходит для работы с большими объёмами данных, их хранения и аналитики. Поэтому умение работать с этой системой важно для всех, чья профессия связана с Big Data, — в том числе для инженеров данных.

Отказоустойчивость. Благодаря механизму репликации Kafka сохраняет данные в случае сбоев и продолжает работать, даже если что-то сломается.
Универсальность. В основе работы Kafka простая схема, которая подходит для разных сценариев: от объединения микросервисов внутри приложения до аналитики больших данных.
Удобные интеграции. Как часть системы Apache, Kafka легко интегрируется с другими продуктами этой системы: Spark, Storm, Flink и пр.
Открытость. Это open source проект — он бесплатен и открыт для изменений всеми пользователями. При желании его можно адаптировать под потребности конкретной компании.
Надежности доставки. Брокер сообщений Kafka использует модель «точная однократная доставка». Это значит, что сообщение будет либо доставлено успешно, либо не будет доставлено вообще. Такое отсутствие дублирования критически важно для некоторых систем — например, для банков, чтобы с клиента дважды не списались деньги. Если же сообщение не будет доставлено, издатель попытается отправить его повторно и рано или поздно преуспеет.
Возможность хранения данных. Kafka может не только доставлять, но и хранить сообщения длительное время, чтобы их можно было обработать и проанализировать позже. Время хранения можно конфигурировать в зависимости от потребностей.
Простота использования. API Kafka удобно подключать к любой системе. Также в ней есть готовые клиентские библиотеки для различных языков программирования.

Где применяется Apache Kafka

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

1. Обработка потоков данных в реальном времени. То есть работа с данными ровно в тот момент, когда они появились или поступили, практически без задержки. Например, в финансовой сфере Kafka может использоваться для отображения и анализа цен акций и изменений рынка.
2. Интеграция систем и сервисов между собой. Часто в продукте используется несколько разных систем. Например, такое случается при микросервисной разработке, когда каждую функцию разрабатывают как отдельный сервис. Kafka обеспечивает связь между этими сервисами и системами, помогая им обмениваться информацией.
3. Логирование. Kafka может принимать и сохранять логи различных событий, а также предоставлять их по запросу.
4. Аналитика больших данных. С помощью брокера сообщений Kafka можно отправлять большие объемы данных на анализ, а также хранить их для будущей аналитики. Это делает Apache Kafka полезной для инженеров данных.

Совет эксперта

Кирилл Дикалин
Apache Kafka ― мощный инструмент для обработки потоков данных в распределённых IT-системах. Для более глубокого понимания его возможностей и работы рекомендую прочитать официальную документацию Kafka, которая содержит подробную информацию о функциональности и способах использования. Также стоит изучить примеры применения Apache Kafka в реальных проектах, чтобы получить практический опыт работы с ней. Советую обратить внимание на книгу «Kafka: The Definitive Guide» Neha Narkhede, Gwen Shapira, Todd Palino, она даёт всестороннее понимание принципов работы Kafka и лучших практик его использования.

Статью подготовили:
Кирилл Дикалин
Яндекс Практикум
Автор и ревьювер на курсе DE, DE в SberData
Яндекс Практикум
Редактор
Анастасия Павлова
Яндекс Практикум
Иллюстратор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться

Успейте начать учебу в Практикуме до конца ноября со скидкой 20%

Tue Oct 15 2024 09:33:11 GMT+0300 (Moscow Standard Time)