Краткое руководство. Создание кластера Apache Kafka в Azure HDInsight с помощью портал Azure

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

Из этого краткого руководства вы узнаете, как создать кластер Apache Kafka с помощью портала Azure. Вы также узнаете, как с помощью предоставленных служебных программ отправлять и получать сообщения, используя Apache Kafka. Подробные объяснения доступных конфигураций см. в статье Set up clusters in HDInsight with Apache Hadoop, Apache Spark, Apache Kafka, and more (Установка кластеров в HDInsight с использованием Apache Hadoop, Apache Spark, Apache Kafka и других технологий). Дополнительные сведения об использовании портала для создания кластеров см. в статье Create Linux-based clusters in HDInsight by using the Azure portal (Создание кластеров под управлением Linux в HDInsight с помощью портала Azure).

Предупреждение

Счета за кластеры HDInsight выставляются пропорционально в минутах, независимо от их использования. Обязательно удалите кластер, когда завершите его использование. Дополнительные сведения см. в статье Удаление кластера HDInsight с помощью браузера, PowerShell или классического интерфейса Azure CLI.

API Apache Kafka доступен только ресурсам, размещенным в той же виртуальной сети. В этом кратком руководстве вы напрямую обращаетесь к кластеру по протоколу SSH. Чтобы подключить к Apache Kafka другие службы, сети или виртуальные машины, необходимо сначала создать виртуальную сеть, а затем создать в ней эти ресурсы. Дополнительные сведения см. в документе Подключение к Kafka в HDInsight с помощью виртуальной сети Azure. Дополнительные сведения о планировании виртуальных сетей для HDInsight см. в статье Планирование виртуальной сети для Azure HDInsight.

Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.

Необходимые компоненты

Клиент SSH. Дополнительные сведения см. в руководстве по подключению к HDInsight (Apache Hadoop) с помощью SSH.

Создание кластера Apache Kafka

Чтобы создать кластер Apache Kafka в HDInsight, сделайте следующее.

  1. Войдите на портал Azure.

  2. В меню сверху выберите + Create a resource (+ Создать ресурс).

    Azure portal create resource HDInsight.

  3. Выберите элементы Analytics>Azure HDInsight, чтобы перейти на страницу Создание кластера HDInsight.

  4. На вкладке Основные сведения укажите следующую информацию:

    Свойство Описание
    Подписка В раскрывающемся списке выберите подписку Azure, которая используется для кластера.
    Группа ресурсов Создайте новую группу ресурсов или выберите имеющуюся группу ресурсов. Группа ресурсов — это контейнер компонентов Azure. В данном случае группа ресурсов содержит кластер HDInsight и зависимую учетную запись хранения Azure.
    Имя кластера Введите глобально уникальное имя. Имя может содержать до 59 знаков, включая буквы, цифры и дефисы. Первый и последний знаки в имени не могут быть дефисами.
    Область/регион В раскрывающемся списке выберите регион, в котором создается кластер. Выберите ближайший к себе регион для повышения производительности.
    Тип кластера Щелкните Выберите тип кластера, чтобы открыть список. В списке выберите Kafka в качестве типа кластера.
    Версия Для типа кластера будет указана версия по умолчанию. Если хотите указать другую версию, выберите ее из раскрывающегося списка.
    Имя для входа и пароль для кластера Имя входа по умолчанию — admin. Пароль должен содержать по крайней мере 10 символов в длину и содержать по крайней мере одну цифру, один верхний регистр и одну строчную букву, одну буквенно-цифровые символы (за исключением символов ' ` "). Убедитесь, что вы не предоставляете общие пароли, Pass@word1например.
    Имя пользователя для Secure Shell (SSH) Имя пользователя по умолчанию — sshuser. Можно указать другое имя пользователя SSH.
    Использовать логин и пароль кластера при подключении через SSH Установите этот флажок, чтобы использовать одинаковый пароль для пользователя SSH и имени для входа для кластера.

    Azure portal create cluster basics.

    В каждом регионе Azure (расположении) предоставляются домены сбоя. Домен сбоя — это логическое объединение базового оборудования в центре обработки данных Azure. Все домены сбоя используют общий источник питания и сетевой коммутатор. Виртуальные машины и управляемые диски, на которых реализуются узлы в кластере HDInsight, распределяются по этим доменам сбоя. Такая архитектура ограничивает потенциальное влияние сбоев физического оборудования.

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

    Нажмите кнопку Далее: Хранилище>> для перехода к настройкам хранилища.

  5. На вкладке Хранилище укажите следующие значения:

    Свойство Description
    Тип первичного хранилища Используйте значение службы хранилища Azure по умолчанию.
    Метод выбора Используйте значение Выбрать в списке по умолчанию.
    Основную учетную запись хранения Используйте раскрывающийся список, чтобы выбрать имеющуюся учетную запись хранения, или создайте новую, щелкнув Создать. При создании учетной записи имя должно содержать от 3 до 24 символов, включая цифры и строчные буквы
    Контейнер Используйте значение, предоставленное автоматически.

    HDInsight Linux get started provide cluster storage values.

    Выберите вкладку Безопасность и сетевые подключения.

  6. Для этого краткого руководства значения параметров безопасности оставьте по умолчанию. Дополнительные сведения о пакете корпоративной безопасности см. в статье "Настройка кластера HDInsight с корпоративным пакетом безопасности с помощью доменных служб Microsoft Entra". Сведения о том, как использовать собственный ключ для шифрования дисков в Apache Kafka, см. в этой статье.

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

    Add cluster to a virtual network.

    Перейдите на вкладку Конфигурация и цены.

  7. Для обеспечения доступности кластера Apache Kafka в HDInsight число узлов для рабочего узла должно быть не меньше 3. Значение по умолчанию — 4.

    Число стандартных дисков для каждой записи рабочего узла определяет степень масштабируемости Apache Kafka в HDInsight. Кластер Apache Kafka в HDInsight использует локальный диск виртуальных машин в кластере для хранения данных. Apache Kafka обрабатывает большое количество операций ввода-вывода, поэтому используются Управляемые диски Azure, чтобы обеспечить высокую пропускную способность и предоставить дополнительное хранилище для каждого узла. Управляемый диск может быть двух типов: Стандартный (HDD) или Премиум (SSD). Тип диска зависит от размера виртуальной машины, используемой рабочими узлами (брокерами Apache Kafka). Диски категории "Премиум" автоматически используются для виртуальных машин серий DS и GS. Для всех остальных виртуальных машин используются стандартные управляемые диски.

    Set the Apache Kafka cluster size.

    Перейдите на вкладку Review + create (Просмотр и создание).

  8. Проверьте конфигурацию кластера. Измените неправильные параметры. Наконец, выберите Создать, чтобы создать кластер.

    Screenshot showing kafka cluster configuration summary for HDI version 5.0.

    Операция создания кластера может занять до 20 минут.

Подключение к кластеру

  1. С помощью команды ssh command подключитесь к кластеру. Измените приведенную ниже команду, заменив CLUSTERNAME именем своего кластера, а затем введите команду:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. При появлении запроса введите пароль пользователя SSH.

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

    Authorized uses only. All activity may be monitored and reported.
    Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.13.0-1011-azure x86_64)
    
     * Documentation:  https://help.ubuntu.com
     * Management:     https://landscape.canonical.com
     * Support:        https://ubuntu.com/advantage
    
      Get cloud support with Ubuntu Advantage Cloud Guest:
        https://www.ubuntu.com/business/services/cloud
    
    83 packages can be updated.
    37 updates are security updates.
    
    
    Welcome to Apache Kafka on HDInsight.
    
    Last login: Thu Mar 29 13:25:27 2018 from 108.252.109.241
    

Получение сведений об узлах Apache Zookeeper и брокера

Для работы с Kafka необходимы сведения об узле Apache Zookeeper и узле брокера. Эти узлы используются API Apache Kafka и многими другими служебными программами, поставляемыми с платформой Kafka.

В этом разделе для получения сведений об узле используется REST API Apache Ambari в кластере.

  1. Установите jq — обработчик командной строки JSON. Эта служебная программа используется для анализа документов JSON. С ее помощью также удобно анализировать сведения об узлах. В открытом сеансе SSH-подключения введите следующую команду для установки jq:

    sudo apt -y install jq
    
  2. Настройте переменную пароля. Замените PASSWORD паролем для входа в кластер, а затем введите следующую команду:

    export PASSWORD='PASSWORD'
    
  3. Извлеките имя кластера с правильным регистром. Фактический регистр имени кластера может отличаться от ожидаемого, в зависимости от способа создания кластера. Эта команда получит фактический регистр для хранения в переменной. Введите следующую команду:

    export CLUSTER_NAME=$(curl -u admin:$PASSWORD -sS -G "http://headnodehost:8080/api/v1/clusters" | jq -r '.items[].Clusters.cluster_name')
    

    Примечание.

    Если вы выполняете этот процесс вне кластера, используйте другой способ хранения имени кластера. Получите имя кластера в нижнем регистре на портале Azure. Затем измените имя кластера на <clustername> в следующей команде и выполните ее: export clusterName='<clustername>'.

  4. Чтобы задать переменную среды со сведениями об узле Zookeeper, выполните следующую команду. Эта команда извлекает все узлы Zookeeper, а затем возвращает только первые две записи. Причина этого состоит в том, что требуется обеспечить избыточность на случай, если узел станет недоступным.

    export KAFKAZKHOSTS=$(curl -sS -u admin:$PASSWORD -G https://$CLUSTER_NAME.azurehdinsight.net/api/v1/clusters/$CLUSTER_NAME/services/ZOOKEEPER/components/ZOOKEEPER_SERVER | jq -r '["\(.host_components[].HostRoles.host_name):2181"] | join(",")' | cut -d',' -f1,2);
    

    Примечание.

    Для этой команды требуется доступ к Ambari. Если кластер находится за пределами NSG, выполните эту команду на компьютере с доступом к Ambari.

  5. Чтобы убедиться, что переменную среды задано верно, выполните следующую команду.

    echo $KAFKAZKHOSTS
    

    Эта команда возвращает сведения аналогичные следующим:

    <zookeepername1>.eahjefxxp1netdbyklgqj5y1ud.ex.internal.cloudapp.net:2181,<zookeepername2>.eahjefxxp1netdbyklgqj5y1ud.ex.internal.cloudapp.net:2181

  6. Чтобы задать переменную среды со сведениями об узле брокера Apache Kafka, выполните следующую команду.

    export KAFKABROKERS=$(curl -sS -u admin:$PASSWORD -G https://$CLUSTER_NAME.azurehdinsight.net/api/v1/clusters/$CLUSTER_NAME/services/KAFKA/components/KAFKA_BROKER | jq -r '["\(.host_components[].HostRoles.host_name):9092"] | join(",")' | cut -d',' -f1,2);
    

    Примечание.

    Для этой команды требуется доступ к Ambari. Если кластер находится за пределами NSG, выполните эту команду на компьютере с доступом к Ambari.

  7. Чтобы убедиться, что переменную среды задано верно, выполните следующую команду.

    echo $KAFKABROKERS
    

    Эта команда возвращает сведения аналогичные следующим:

    <brokername1>.eahjefxxp1netdbyklgqj5y1ud.cx.internal.cloudapp.net:9092,<brokername2>.eahjefxxp1netdbyklgqj5y1ud.cx.internal.cloudapp.net:9092

Управление разделами Apache Kafka

Kafka хранит потоки данных в разделах. Для управления разделами можно использовать служебную программу kafka-topics.sh.

  • Чтобы создать раздел, в сеансе SSH-подключения выполните следующую команду.

    /usr/hdp/current/kafka-broker/bin/kafka-topics.sh --create --replication-factor 3 --partitions 8 --topic test --zookeeper $KAFKAZKHOSTS
    

    Эта команда создает подключение к Zookeeper, используя хранящиеся в $KAFKAZKHOSTS сведения об узле. Затем она создает раздел Apache Kafka с именем test.

    • Данные, хранящиеся в этом разделе, разделены на восемь секций.

    • Каждая секция реплицируются на три рабочих узла в кластере.

      • Если кластер был создан в регионе Azure, который предоставляет три домена сбоя, то следует использовать коэффициент репликации, равный 3. В противном случае следует использовать коэффициент репликации, равный 4.

      • В регионах с тремя доменами сбоя коэффициент репликации, равный 3, обеспечивает распределение реплик по доменам сбоя. В регионах с двумя доменами сбоя коэффициент репликации, равный 4, обеспечивает равномерное распределение реплик по доменам сбоя.

      • Дополнительные сведения о количестве доменов сбоя в регионе см. в разделе Использование управляемых дисков для виртуальных машин в группе доступности.

      • В Apache Kafka нет сведений о доменах сбоя Azure. При создании реплик секций для разделов реплики могут быть неправильно распределены с точки зрения высокой доступности.

      • Для обеспечения высокого уровня доступности используйте средство перераспределения секций Apache Kafka. Этот инструмент следует запускать из сеанса SSH-подключения на головном узле кластера Apache Kafka.

      • Чтобы обеспечить максимально высокий уровень доступности данных Apache Kafka, следует перераспределять реплики секций для раздела в следующих случаях:

        • при создании раздела или секции;

        • при масштабировании кластера.

  • Чтобы вывести список разделов, введите следующую команду.

    /usr/hdp/current/kafka-broker/bin/kafka-topics.sh --list --zookeeper $KAFKAZKHOSTS
    

    Она выводит список разделов на кластере Apache Kafka.

  • Чтобы удалить раздел, используйте следующую команду.

    /usr/hdp/current/kafka-broker/bin/kafka-topics.sh --delete --topic topicname --zookeeper $KAFKAZKHOSTS
    

    Она удаляет раздел topicname.

    Предупреждение

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

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

/usr/hdp/current/kafka-broker/bin/kafka-topics.sh

Создание и использование записей

В Kafka записи хранятся в разделах. Записи создаются производителями, а используются потребителями. Производители и потребители взаимодействуют со службой брокера Kafka. Каждый рабочий узел в кластере HDInsight — это узел брокера Apache Kafka.

Чтобы сохранить записи в созданный ранее раздел test, а затем считать их с помощью потребителя, сделайте следующее:

  1. Чтобы записать записи в раздел, используйте служебную программу kafka-console-producer.sh из сеанса SSH-подключения.

    /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --broker-list $KAFKABROKERS --topic test
    

    После выполнения этой команды вы перейдете к пустой строке.

  2. Введите текстовое сообщение в эту строку и нажмите клавишу ВВОД. Введите несколько таких сообщений, а затем нажмите клавиши CTRL+C, чтобы вернуться к обычной командной строке. Каждая строка отправляется в раздел Apache Kafka как отдельная запись.

  3. Чтобы считать записи из раздела, используйте служебную программу kafka-console-consumer.sh из сеанса SSH-подключения.

    /usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --bootstrap-server $KAFKABROKERS --topic test --from-beginning
    

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

    Если вы используете более раннюю версию Kafka, замените --bootstrap-server $KAFKABROKERS на --zookeeper $KAFKAZKHOSTS.

  4. Нажмите клавиши Ctrl+C, чтобы остановить потребитель.

Вы также можете создать отправители и получатели программными средствами. Пример использования этого API см. в руководстве Использование API производителя и потребителя Apache Kafka.

Очистка ресурсов

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

Чтобы удалить группу ресурсов с помощью портала Azure, сделайте следующее:

  1. На портале Azure разверните меню слева, чтобы открыть меню служб, а затем выберите Группы ресурсов, чтобы просмотреть список групп ресурсов.
  2. Найдите группу ресурсов, которую нужно удалить, и щелкните правой кнопкой мыши кнопку Дополнительно (…) справа от списка.
  3. Выберите Удалить группу ресурсов и подтвердите выбор.

Предупреждение

При удалении кластера Apache Kafka в HDInsight удаляются все хранимые данные в Kafka.

Следующие шаги