Apache Kafka® - это платформа обработки потоковых данных, созданная корпорацией LinkedIn ™ и ставшая открытой в 2011 году. Kafka написан на Scala и Java.

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

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

3 вещи, которые вам позволяет делать Кафка

  1. Публикуйте и потребляйте потоки записей.
  2. Храните потоки записей с помощью отказоустойчивого механизма.
  3. Обрабатывайте потоки записей по мере их появления.

6 основных компонентов Kafka

1. Темы

В модели pub-sub сообщения структурированы или упорядочены по темам. В Kafka тема идентифицируется по имени, что похоже на таблицу в базе данных.

С каждой темой будет связан поток данных. Мы можем создать столько тем, сколько захотим.

2. Разделы

Тема дополнительно разделена на разделы, чтобы она могла обрабатывать произвольный объем данных. На схеме ниже раздел настроен на три раздела: раздел 0, раздел 1 и раздел 2.

3. Смещения

Каждое сообщение, опубликованное в разделе, получает уникальный инкрементный идентификатор, называемый «идентификатором смещения».

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

4. Брокеры

Кластер Kafka состоит из нескольких брокеров, то есть серверов. Как только мы подключимся к любому брокеру (называемому брокером «bootrap»), мы будем подключены ко всему кластеру. Поскольку брокеры не имеют состояния, для их обслуживания используется программное обеспечение Apache Zookeeper ™.

Давайте разберемся в этом на примере

У нас есть 3 брокера и, скажем, 2 темы, в каждой по 3 раздела. Эти разделы имеют реплики на разных серверах. Если у одного брокера происходит сбой, он синхронизирует свои данные с другим брокером.

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

5. Zookeeper

Zookeeper используется для координации и поддержки брокеров Kafka. Он используется для уведомления производителя и потребителей о любом брокере, представленном в кластере.

Он также информирует их о наличии или отказе от брокеров. Эта информация направляет деятельность производителя и потребителей.

6. Кластер

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

Кластеры имеют четыре основных API

  • Producer API: он публикует записи по темам в Kafka.
  • Consumer API: он извлекает записи, хранящиеся в темах Kakfa.
  • Streams API: клиентская библиотека для обработки данных, хранящихся в Kafka.
  • Connectors API: структура, используемая для создания соединителей для перемещения данных между Kafka и другими системами, как в Kafka, так и из него.

Разберем процесс настройки единого брокерского кластера в Kafka.

Настройка кластера с единым брокером в Kafka

Шаг 1. Загрузите zip-файл Kafka и распакуйте его с помощью следующей команды.

tar -xzf kafka_2.11–0.10.2.0.tgz

Шаг 2: мы должны сначала запустить Zookeeper, чтобы запустить Kafka, потому что Kafka зависит от Zookeeper. Для этого выполните следующую последовательность:

  • Сначала запустите Zookeeper:

bin/zookeeper-server-start.sh config/zookeeper.properties

  • Затем запустите Kafka:

bin/kafka-server-start.sh config/server.properties

  • Создайте тему

bin/kafka-topics.sh — create — bootstrap-server localhost:29092 — replication-factor 2 — partitions 2 — topic test

  • Чтобы перечислить все темы

bin/kafka-topics.sh — list — bootstrap-server localhost:29092

  • Чтобы проверить количество брокеров

bin/kafka-console-producer.sh — broker-list localhost:29092 — topic test

  • Чтобы отправить сообщение от производителя

bin/kafka-console-producer.sh — broker-list localhost:29092 — topic test

  • Чтобы использовать эти сообщения

bin/kafka-console-consumer.sh — bootstrap-server localhost:9092 — from-beginning — topic my-replicated-topic

Теперь давайте проверим отказоустойчивость. Например, если Брокер 3 был лидером, давайте его убьем:

ps aux | grep server-3.properties
7674 ttys002 0:15.91 /System/Library/Frameworks/JavaVM.framework/Versions/1.8/Home/bin/java…
> kill -9 7674

Обратите внимание, что в этом случае руководство переключилось на одного из указанных последователей, и узел 3 больше не входит в набор синхронизированной репликации.

Чтобы сделать все это с помощью Node.js API, мы можем выполнить следующие действия.

Шаг 1. Установите модуль npm со следующим кодом:

npm install node-rdkafka

Шаг 2. Используя этот модуль npm, мы можем получить доступ к API Node.js как для производителей, так и для потребителей.

Мы можем настроить наши API следующим образом, используя концепцию «немого брокера» .

В приведенном ниже примере API производителя используется для публикации данных брокеру Kafka.

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

Шаг 3. Давайте рассмотрим пример использования потребительского API для подписки сразу на несколько сообщений.

Это стандартный API для потребителей Kafka, и мы можем настроить его в соответствии с нашими требованиями.

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

7 популярных вариантов использования Kafka

  1. Как система обмена сообщениями.
  2. Отслеживание активности.
  3. Сбор показателей из разных мест.
  4. Сбор логов приложений.
  5. Обработка потоков (с помощью Streams API Kafka или программного обеспечения Apache Spark ™)
  6. Разделение системных зависимостей.
  7. Кроме того, возможна интеграция со Spark, Hadoop и другим программным обеспечением для работы с большими данными.

По имеющимся данным, многие крупные компании, такие как LinkedIn, Uber ™, Netflix и Yahoo! (Verizon Media); а мы в DLT Labs ™ используем Kafka.

Что такое система обмена сообщениями?

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

Kafka использует систему обмена сообщениями pub-sub (сокращение от модели публикации-подписки). В этом случае издатели сообщений называются производителями, а подписчики сообщений - потребителями.

Заключение

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

4 преимущества Kafka

  1. Надежность. Kafka отказоустойчивый, распределенный и тиражируемый. Он реплицирует данные и может поддерживать массовых подписчиков.
  2. Масштабируемость. Это распределенная система, поэтому она быстро масштабируется.
  3. Надежность: Kafka использует распределенный журнал фиксации для записи изменений, внесенных на узле, что означает, что сообщения сохраняются на диске.
  4. Производительность. Он имеет высокую пропускную способность как для создания, так и для приема сообщений.

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

Kafka часто настраивается для запуска нескольких сервисов брокеров и Zookeeper в Docker. Если вы не знаете, как это сделать, не бойтесь. Ознакомьтесь с нашим постом здесь:



Kafka, Apache Kafka, Apache Spark, Apache Zookeeper и Hadoop являются зарегистрированными товарными знаками или товарными знаками Apache Software Foundation в США и / или других странах. Использование этих знаков не означает одобрения Apache Software Foundation. LinkedIn является зарегистрированным товарным знаком LinkedIn Corporation и ее дочерних компаний в США и / или других странах. Uber является товарным знаком Uber Technologies, Inc. Netflix является зарегистрированным товарным знаком Netflix, Inc. Yahoo! является товарным знаком Verizon Media. Node.js является товарным знаком Joyent, Inc. и используется с ее разрешения. Мы не поддерживаем Joyent и не связаны с ней. npm является зарегистрированным товарным знаком npm, Inc.

DLT Labs является товарным знаком DLT Global, Inc.

Автор - Пранджал Гупта, DLT Labs

Об авторе: Пранджал в настоящее время работает с нашей командой DL Asset Track в качестве разработчика Nodejs.