Что такое Kafka?

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

Kafka выполняет три основные функции:

  • публикует потоки записей и подписывается на них;
  • эффективно хранит потоки в том порядке, в котором они были созданы;
  • обрабатывает потоки в реальном времени.

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

Для чего используется Kafka?

Решение Kafka используется для построения конвейеров потоковых данных и приложений потоковой передачи данных в реальном времени. Конвейер данных надежно обрабатывает и перемещает данные из одной системы в другую, а потоковое приложение использует их потоки. Например, с помощью Kafka можно создать конвейер данных, который собирает информацию о том, как люди используют ваш веб-сайт в режиме реального времени. Kafka принимает и хранит потоковые данные, а также выполняет операции чтения для приложений, работающих с конвейером данных. Также Kafka можно использовать в качестве брокера сообщений – платформы, которая обрабатывает и обеспечивает связь между двумя приложениями.

Как работает Kafka?

Kafka сочетает две модели обмена сообщениями: организацию очередей и шаблон «издатель – подписчик». Это позволяет извлечь преимущества из обеих и предоставить их потребителям. Организация очередей позволяет распределять обработку данных между множеством инстансов потребителей, что обеспечивает высокую масштабируемость. Однако традиционные очереди рассчитаны только на одного подписчика. Шаблон «издатель – подписчик» рассчитан на нескольких подписчиков, но поскольку все сообщения отправляются каждому из них, его нельзя использовать для распределения работы между несколькими рабочими процессами. В Kafka используется модель журнала с разделами для объединения этих двух решений. Журнал – это упорядоченная последовательность записей, разбитая на сегменты, или разделы, для разных подписчиков. Это означает, что на одну и ту же тему может быть подписано несколько человек, и каждому из них назначается раздел, что обеспечивает более высокую масштабируемость. Наконец, Kafka обеспечивает воспроизводимость, что позволяет нескольким отдельным приложениям, считывающим данные из потоков, работать независимо друг от друга со своей скоростью.

Организация очереди

Шаблон «издатель – подписчик»

В чем преимущества того, как работает Kafka?

Масштабируемость

Модель журнала Kafka с разделами позволяет распределять данные по нескольким серверам, что делает их более масштабируемыми, чем если бы данные размещались на одном сервере. 

Скорость

Kafka разделяет потоки данных, уменьшая задержки и чрезвычайно ускоряя систему. 

Надежность

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

Как архитектура Kafka объединяет разноплановые модели?

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

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

В чем разница между Apache Kafka и RabbitMQ?

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

Характеристики

Apache Kafka

RabbitMQ

Архитектура

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

В RabbitMQ используется очередь сообщений.

Масштабируемость

Kafka поддерживает масштабируемость, предоставляя возможность распределять разделы по разным серверам.

Увеличивайте количество потребителей в очереди, чтобы масштабировать процесс обработки данных для этих конкурирующих потребителей.

Хранение сообщений

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

В соответствии с принципом подтверждения сообщения удаляются по мере их потребления.

Для нескольких потребителей

На одну и ту же тему могут подписаться несколько потребителей, поскольку в Kafka допускается воспроизведение одного и того же сообщения в течение определенного промежутка времени.

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

Репликация

Репликация тем осуществляется автоматически, но пользователь может вручную отключить ее.

Сообщения не реплицируются автоматически, но пользователь может вручную настроить их для репликации.

Порядок сообщений

Благодаря архитектуре разделенного журнала каждый потребитель получает информацию по порядку.

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

Протоколы

В Kafka используется протокол передачи двоичных данных через TCP.

Расширенный протокол очереди сообщений (AMQP) с поддержкой плагинов MQTT и STOMP.

Подробнее о разнице между Kafka и RabbitMQ »

Как AWS обеспечивает соответствие требованиям Kafka?

Подробнее о том, как вручную развернуть Kafka на AWS, читайте здесь.

Среди продуктов AWS также есть Amazon MSK – наиболее совместимый, доступный, безопасный и полностью управляемый сервис для Apache Kafka. Благодаря ему, клиенты могут заполнять озера данных, передавать изменения в базы данных и из них, а также использовать приложения машинного обучения и аналитики. Благодаря Amazon MSK клиенты могут тратить меньше времени на управление инфраструктурой и больше – на создание приложений. Подробнее об Amazon MSK.

AWS: дальнейшие шаги

Зарегистрировать бесплатный аккаунт

Получите мгновенный доступ к уровню бесплатного пользования AWS.

Регистрация 
Начать разработку в консоли

Начните разработку в Консоли управления AWS.

Вход