Управляемые базы данных. Apache Kafka®

Компания LinkedIn в 2011 году разработала брокер сообщений Kafka. Сейчас Kafka — это отказоустойчивая распределенная стриминговая платформа с открытым исходным кодом, которая позволяет хранить, обрабатывать и доставлять огромные объемы данных в реальном времени.

Apache Kafka

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

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

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

Apache Kafka — это не СУБД в чистом виде, несмотря на то что она обеспечивает атомарность, согласованность, изолированность и долговечность хранимых данных, а также предоставляет возможность избирательного доступа к данным с помощью KSQL — SQL-движка на базе API Kafka Streams. Платформу используют как журнал фиксации и интеграционный центр для множества внешних СУБД и хранилищ.

Kafka use-cases scheme

Kafka vs RabbitMQ

Kafka часто сравнивают с другим популярным программным брокером сообщений и системой управления очередями — RabbitMQ. Обе системы используются для обмена информацией между приложениями, работают по схеме «издатель — подписчик» и обеспечивают репликацию сообщений. Однако они реализуют принципиально разные модели доставки сообщений: Kafka — pull (получатели сами достают из топика сообщения), а RabbitMQ — push (отправляет сообщения получателям).

Также RabbitMQ удаляет сообщение после доставки, а Kafka хранит его до запланированной очистки журнала. Таким образом, Apache Kafka сохраняет текущее и все прежние состояния системы и может использоваться как достоверный источник исторических данных. Это позволяет множеству потребителей читать одни и те же данные независимо, и такой паттерн удобен, например, в event-driven-системах.

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

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

Основное назначение Apache Kafka — это централизованный сбор, обработка, безопасное хранение и передача большого количества сообщений от отделенных друг от друга сервисов. Эта распределенная, горизонтально масштабируемая платформа обычно применяется там, где очень много больших неструктурированных данных:

  • Масштабные IoT/IIoT-системы, характеризующиеся архитектурой с множеством датчиков, сенсоров, контроллеров и других конечных устройств.
  • Системы аналитики. Например, Kafka используется в компаниях IBM и DataSift в качестве коллектора для мониторинга событий и трекера потребления потоков данных пользователями в режиме реального времени.
  • Финансовые системы. Используют финансовые организации: Сбербанк, Тинькофф, Альфа-Банк, ING Bank.
  • Социальные сети. В Twitter Kafka — часть инфраструктуры потоковой обработки, а в LinkedIn используется для потоковой передачи данных о деятельности и операционных показателях приложений.
  • Системы геопозиционирования. Foursquare — для передачи сообщений между онлайн- и офлайн-системами, а также для интеграции средств мониторинга в свою big data инфраструктуру на базе Hadoop.
  • Телеком-операторы. ВымпелКом, МТС, Ростелеком и др.
  • Онлайн-игры. Например, Demonware, подразделение Activision Blizzard — для обработки логов пользователей.

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

Managed Service for Apache Kafka

Создание, настройка и управление кластерами Apache Kafka — очень сложная задача, требующая внимания сертифицированных специалистов. В Yandex.Cloud брокер сообщений предоставляется как управляемый сервис, управление и обслуживание которого производится на стороне облачной платформы. Пользователь может создавать и настраивать кластеры для решения своих задач, а управление брокерами, обновление и оптимизация работы Apache Kafka происходит автоматически.

Возможности управляемого сервиса Managed Service for Apache Kafka в Yandex.Cloud:

  • Быстрое добавление брокеров в кластер.
  • Распределение брокеров кластера между зонами доступности.
  • Быстрое изменение ресурсов высокодоступной конфигурации без остановки работы и потери данных.
  • Настройка политики очистки лога, типа сжатия и максимального количества сообщений для эффективного использования вычислительных, сетевых и дисковых ресурсов.
  • Настройка репликации для обеспечения отказоустойчивости.
  • Анализ метрики и состояния кластера.
  • Автоматическая замена узлов кластера при отказе.
  • Шифрование соединений при помощи протокола TLS. Механизм SASL контролирует доступ пользователей к топикам по спискам контроля доступа (ACL).
  • Соответствие требованиям 152-ФЗ, индустриальным стандартам ISO и GDPR.

Managed Service for Apache Kafka вместе с другими управляемыми сервисами Yandex.Cloud позволяет создавать на облачной платформе витрины данных. Например, Yandex Managed Service for ClickHouse отлично справляется с обработкой запросов к большим объемам данных, Yandex Data Proc автоматически создаст и настроит кластеры Spark, Hadoop и другие компоненты, а Yandex DataLens позволит визуализировать эти данные и построить отчеты. С помощью Apache Kafka можно поставлять данные напрямую в ClickHouse без дополнительной разработки.

Создать свой первый кластер Apache Kafka в Yandex.Cloud →

  • Статьи