Платформу разработали в 2010 году инженеры компании LinkedIn. Они столкнулись с проблемой обработки и передачи большого объёма данных в режиме реального времени. Сервисы, которые в целом умели это делать, существовали, но не справлялись с огромными объёмами данных.
Изначально Kafka разрабатывали как систему для внутреннего пользования, но потом выпустили её на широкий рынок. Постепенно она завоевала популярность благодаря своей масштабируемости, высокой пропускной способности и устойчивости к отказам. И в 2012 году её передали компании Apache Software Foundation. Так платформа превратилась в Apache Kafka, которая со временем стала одним из самых популярных инструментов для обработки потоков данных в реальном времени. Сейчас она используется во многих отраслях: электронной коммерции, банковском деле, телекоммуникации и других.
Чтобы объединить издателей и подписчиков, Kafka создает отдельные каналы, которые называются темами. Издатели отправляют сообщения в конкретные темы, а подписчики следят за определёнными темами. Как только в теме появляется новое сообщение, его получают все подписанные на неё адресаты.
Внутри тем существуют разделы, специально для каждого подписчика. Одно сообщение может уйти в одну тему, но в несколько разделов — и его заберут несколько подписчиков.
Поскольку сообщений много, они попадают в последовательную очередь, из которой подписчик считывает сообщения в порядке их поступления. При этом структура платформы построена так, что даже при последовательных очередях Kafka способна обрабатывать миллионы сообщений в секунду.
Когда в системе появляется новый товар, сервис отправки уведомлений обращается к Apache Kafka и отправляет об этом сообщение в тему «Новые товары». Сервис оформления заказа и сервис поиска товаров подписаны на эту тему, поэтому сразу получают это сообщение и добавляют новый товар к себе.
Когда клиент что-то покупает, сервис оформления заказа отправляет сообщение в тему «Новые заказы». И уведомление о нём получат все, кто подписан на эту тему.
Весь этот обмен происходит в реальном времени — сервисы постоянно «заглядывают» в нужные темы и мгновенно получают оттуда сообщения. То есть если заказали последний товар, Kafka сразу об этом сообщит.
Существуют и другие брокеры сообщений, однако у Apache Kafka есть перед ними несколько преимуществ:
✅ Масштабируемость. В Kafka можно легко добавлять дополнительные разделы, чтобы увеличивать пропускную способность системы и обрабатывать больше запросов. Это особенно полезно для систем, которые быстро растут или подвержены резким всплескам нагрузки — например, при распродажах в «Чёрную пятницу».
Благодаря масштабируемости Apache Kafka отлично подходит для работы с большими объёмами данных, их хранения и аналитики. Поэтому умение работать с этой системой важно для всех, чья профессия связана с Big Data, — в том числе для инженеров данных.
✅ Отказоустойчивость. Благодаря механизму репликации Kafka сохраняет данные в случае сбоев и продолжает работать, даже если что-то сломается.
✅ Универсальность. В основе работы Kafka простая схема, которая подходит для разных сценариев: от объединения микросервисов внутри приложения до аналитики больших данных.
✅ Удобные интеграции. Как часть системы Apache, Kafka легко интегрируется с другими продуктами этой системы: Spark, Storm, Flink и пр.
✅ Открытость. Это open source проект — он бесплатен и открыт для изменений всеми пользователями. При желании его можно адаптировать под потребности конкретной компании.
✅ Надежности доставки. Брокер сообщений Kafka использует модель «точная однократная доставка». Это значит, что сообщение будет либо доставлено успешно, либо не будет доставлено вообще. Такое отсутствие дублирования критически важно для некоторых систем — например, для банков, чтобы с клиента дважды не списались деньги. Если же сообщение не будет доставлено, издатель попытается отправить его повторно и рано или поздно преуспеет.
✅ Возможность хранения данных. Kafka может не только доставлять, но и хранить сообщения длительное время, чтобы их можно было обработать и проанализировать позже. Время хранения можно конфигурировать в зависимости от потребностей.
✅ Простота использования. API 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 и лучших практик его использования.
Читать также: