Статьи

Начало работы с потоками MapR

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

Хотя MapR Streams обычно использует модель программирования Apache Kafka , есть несколько ключевых отличий. Например, в файловой системе MapR появился новый тип объектов, который, как ни странно, называется потоком. Каждый поток может обрабатывать огромное количество тем, и вы можете иметь много потоков в одном кластере. Политики, такие как время жизни или ACE (выражения контроля доступа), могут быть установлены на уровне потока для удобного совместного управления многими темами. Вы можете узнать больше о потоковых архитектурах с использованием потоков Kafka и MapR в новой короткой книге « Потоковые архитектуры: новые разработки с использованием потоков Apache Kafka и MapR» , которую можно бесплатно загрузить с веб-сайта MapR.

Если у вас уже есть приложения Kafka, их легко перенести в потоки MapR. Вы можете узнать больше в документации MapR на http://maprdocs.mapr.com/51/ — MapR_Streams / migrating_kafka_applications_to_mapr_streams.html

В этом текущем блоге мы опишем, как запустить простое приложение, которое мы изначально написали для Kafka, используя вместо этого MapR Streams.

Примеры программ

Как упоминалось выше, MapR Streams использует Kafka API 0.9.0 , что означает, что можно повторно использовать то же приложение с небольшими изменениями. Прежде чем погрузиться в конкретный пример, давайте посмотрим, что нужно изменить:

  1. Имена тем изменяются с « topic-name » на « /stream-name:topic-name », поскольку MapR организует темы в потоках по причинам управления (безопасность, TTL и т. Д.).
  2. Параметры конфигурации производителя и потребителя , которые не используются потоками MapR, автоматически игнорируются, поэтому здесь никаких изменений нет.
  3. Приложения производителя и потребителя используют банки от MapR, а не банки Apache Kafka.

Вы можете найти полное приложение на странице примеров программ для MapR Streams . Это простая копия, включающая незначительные изменения в проекте Sample Programs for Kafka 0.9 API . Этот проект Kafka был задокументирован в этой статье .

Предпосылки

Вам понадобятся базовые навыки программирования на Java, а также доступ к:

Запуск вашего первого приложения MapR Streams

Шаг 1: Создать поток

Поток — это набор тем, которыми вы можете управлять вместе:

  1. Настройка политик безопасности, которые применяются ко всем темам в этом потоке
  2. Установка количества разделов по умолчанию для каждой новой темы, созданной в потоке
  3. Установите время жизни для сообщений в каждой теме в потоке

Вы можете найти больше информации о концепциях MapR Streams в документации .

Выполните следующую команду, как пользователь mapr , в своем кластере mapr :

1
$ maprcli stream create -path /sample-stream

По умолчанию разрешения на создание и использование темы устанавливаются по умолчанию создателю потоков — пользователю unix, который вы используете для запуска команды maprcli. Можно настроить разрешение путем редактирования потоков. Например, чтобы сделать все темы доступными для всех (общедоступное разрешение), вы можете выполнить следующую команду:

1
$ maprcli stream edit -path /sample-stream -produceperm p -consumeperm p -topicperm p

Шаг 2: Создайте темы

Нам нужны две темы для примера программы, которые мы можем создать с помощью maprcli :

1
2
$ maprcli stream topic create -path /sample-stream  -topic fast-messages
$ maprcli stream topic create -path /sample-stream  -topic summary-markers

Эти темы могут быть перечислены с помощью следующей команды:

1
2
3
4
$ maprcli stream topic list -path /sample-stream
topic            partitions  logicalsize  consumers  maxlag  physicalsize
fast-messages    1           0            0          0       0
summary-markers  1           0            0          0       0

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

Шаг 3: Скомпилируйте и упакуйте примеры программ

Вернитесь в каталог, где у вас есть примеры программ и соберите примеры программ.

1
2
3
$ cd ..
$ mvn package
...

Проект создает банку со всеми внешними зависимостями ( ./target/mapr-streams-examples-1.0-SNAPSHOT-jar-with-dependencies.jar )

Обратите внимание, что вы можете построить проект с зависимостями Apache Kafka, если вы не запакуете их в свое приложение при запуске и развертывании. Этот пример имеет зависимость от клиента MapR Streams, который можно найти в репозитории mapr.com maven.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
   <repositories>
       <repository>
           <id>mapr-maven</id>
           <url>http://repository.mapr.com/maven</url>
           <releases><enabled>true</enabled></releases>
           <snapshots><enabled>false</enabled></snapshots>
       </repository>
   </repositories>
   ...
       <dependency>
           <groupId>org.apache.kafka</groupId>
           <artifactId>kafka-clients</artifactId>
           <version>0.9.0.0-mapr-1602</version>
           <scope>provided</scope>
       </dependency>
  ...

Шаг 4: Запустите пример производителя

Вы можете установить MapR Client и запустить приложение локально или скопировать файл JAR в свой кластер (любой узел).

1
$ scp ./target/mapr-streams-examples-1.0-SNAPSHOT-jar-with-dependencies.jar mapr@<YOUR_MAPR_CLUSTER>:/home/mapr

Производитель отправит большое количество сообщений в /sample-stream:fast-messages вместе со случайными сообщениями в /sample-stream:summary-markers . Поскольку еще не запущено ни одного потребителя, никто не получит сообщения.

Если вы сравните это с примером Kafka, использованным для создания этого приложения, то имя темы — единственное изменение в коде.

Любому приложению MapR Streams потребуются клиентские библиотеки MapR. Один из способов сделать эти библиотеки доступными для добавления их в путь к классам приложения с помощью команды /opt/mapr/bin/mapr classpath . Например:

1
2
3
4
5
6
$ java -cp $(mapr classpath):./mapr-streams-examples-1.0-SNAPSHOT-jar-with-dependencies.jar com.mapr.examples.Run producer
Sent msg number 0
Sent msg number 1000
...
Sent msg number 998000
Sent msg number 999000

Единственное важное различие между приложением Apache Kafka и приложением MapR Streams заключается в том, что клиентские библиотеки различаются. Это заставляет MapR Producer подключаться к кластеру MapR для публикации сообщений, а не к брокеру Kafka.

Шаг 5: Запустите пример потребителя

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

01
02
03
04
05
06
07
08
09
10
$ java -cp $(mapr classpath):./mapr-streams-examples-1.0-SNAPSHOT-jar-with-dependencies.jar com.mapr.examples.Run consumer
1 messages received in period, latency(min, max, avg, 99%) = 20352, 20479, 20416.0, 20479 (ms)
1 messages received overall, latency(min, max, avg, 99%) = 20352, 20479, 20416.0, 20479 (ms)
1000 messages received in period, latency(min, max, avg, 99%) = 19840, 20095, 19968.3, 20095 (ms)
1001 messages received overall, latency(min, max, avg, 99%) = 19840, 20479, 19968.7, 20095 (ms)
...
1000 messages received in period, latency(min, max, avg, 99%) = 12032, 12159, 12119.4, 12159 (ms)
<998001 messages received overall, latency(min, max, avg, 99%) = 12032, 20479, 15073.9, 19583 (ms)
1000 messages received in period, latency(min, max, avg, 99%) = 12032, 12095, 12064.0, 12095 (ms)
999001 messages received overall, latency(min, max, avg, 99%) = 12032, 20479, 15070.9, 19583 (ms)

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

Мониторинг ваших тем

В любое время вы можете использовать инструмент maprcli, чтобы получить некоторую информацию по теме. Например:

1
$ maprcli stream topic info -path /sample-stream -topic fast-messages -json

Параметр -json используется для получения информации о теме в виде документа JSON.

Убираться

Когда вы закончите играть, вы можете удалить поток и все связанные темы, используя следующую команду:

1
$ maprcli stream delete -path /sample-stream

Вывод

Используя этот пример, созданный из приложения Apache Kafka, вы научились писать, развертывать и запускать свое первое приложение MapR Streams.

Как видите, код приложения действительно похож, и нужно сделать всего несколько изменений (например, изменить названия тем). Это означает, что вы можете легко развернуть ваши приложения Kafka на MapR и воспользоваться всеми преимуществами MapR Streams, такими как повышенная безопасность, географически распределенное развертывание, очень большое количество тем и многое другое. Это также означает, что вы можете сразу использовать все свои навыки Apache Kafka в развертывании MapR.

Если у вас есть какие-либо вопросы по поводу запуска приложения MapR Streams, пожалуйста, задавайте их в разделе комментариев ниже.