VK Cloud logo

Установка и настройка сервиса Apache Kafka

Вы можете развернуть кластер Apache Kafka на выделенных виртуальных машинах в VK Cloud. Кластер использует современную встроенную систему управления метаданными (KRaft) и не зависит от сервиса ZooKeeper.

Для обеспечения безопасности коммуникации и управления доступом в кластере Kafka применяется комплексный подход: все данные между клиентом и брокером передаются в зашифрованном виде через протокол TLS, а подлинность пользователей проверяется с помощью алгоритма SCRAM-SHA-512. Для минимизации рисков права доступа разделены: у администратора, приложений и систем мониторинга есть собственные изолированные учетные записи с разными уровнями привилегий.

Пройдя все шаги инструкции, вы:

  1. Развернете кластер Apache Kafka.
  2. Настроите и проверите подключение клиента к кластеру.
  3. Создадите топик и отправите тестовые сообщения.
  4. Ознакомитесь с веб-консолью Kafbat UI.
  5. Подключитесь к узлам по SSH и настроите мониторинг.

Используя сервис Apache Kafka, вы соглашаетесь с лицензионными соглашениями Marketplace VK Cloud и Apache Kafka.

Подготовительные шаги

  1. Зарегистрируйтесь в VK Cloud и перейдите в личный кабинет.

  2. Настройте сеть, чтобы иметь доступ к сервису из интернета:

    1. Создайте сеть с доступом в интернет, если это еще не сделано.
    2. В настройках подсети, где будут размещены ВМ с развернутым сервисом, отключите опцию Приватный DNS.

1. Подключите сервис Apache Kafka

  1. В личном кабинете VK Cloud перейдите в раздел Магазин приложений.

  2. Нажмите на карточку сервиса Apache Kafka.

    Если на странице нет карточки сервиса Apache Kafka, нажмите кнопку Все решения и найдите карточку в каталоге.

  3. На вкладке Тарифные планы выберите версию сервиса из списка.

  4. Выберите подходящий тариф:

    • Один узел — сервис разворачивается на одной ВМ, фактор репликации — 1. Подходит для разработки простых проектов, демонстраций или тестирования.
    • Кластер — сервис разворачивается на трех, пяти или семи узлах, фактор репликации — 3. Первые 3 узла образуют кворум KRaft, остальные работают брокерами. Узлы распределяются по зонам доступности MS1, ME1 и PA2. Подходит для решения реальных бизнес-задач, где важна высокая доступность.
  5. Укажите параметры ВМ, на которых будет развернут сервис:

    • Число узлов (только для тарифа Кластер): выберите 3, 5 или 7 узлов.
    • Тип машины: выберите конфигурацию ВМ из списка — от 2-8 до 16-64, где первое число задает количество ядер, второе — объем памяти в гигабайтах. Для промышленной нагрузки выбирайте от 4 vCPU и 16 ГБ RAM.
    • Сеть: выберите ранее созданную сеть с доступом в интернет и подсеть с отключенной опцией Приватный DNS.
  6. Укажите параметры системного диска и диска с данными:

    • Размер диска: укажите нужный размер диска ВМ в гигабайтах.
    • Тип диска: выберите один из типов диска — HDD, SSD или High-IOPS SSD.
  7. Нажмите кнопку Следующий шаг.

  8. Настройте параметры доступа:

    • Сеть клиентов: укажите значение subnet, чтобы открыть брокеры только из выбранной подсети, либо задайте диапазон сети, в которой работают приложения. Метрики отдаются без пароля, поэтому диапазон лучше сузить.
    • Доступ из интернета: включите опцию, чтобы иметь доступ к сервису из интернета. В этом случае каждый узел получит публичный адрес и доменное имя. Для подключения используется порт 9094.
    • Веб-консоль: включите доступ к странице в браузере для просмотра топиков, сообщений и групп потребителей. Этот параметр можно изменить после развертывания.
    • Управление из консоли (только если включена опция Веб-консоль): включите опцию, чтобы разрешить управление топиками из консоли. Режим можно изменить после развертывания.
    • Общий адрес консоли (только для тарифа Кластер): включите опцию, чтобы обращаться к консоли по общему адресу через балансировщик нагрузки. Если опция отключена, адресов у консоли столько же, сколько узлов с консолью. Каждая консоль видит весь кластер. Этот параметр можно задать только при развертывании сервиса, изменить его потом нельзя.
    • Домен и сертификат консоли: включите опцию, чтобы консоль получила доменное имя в зоне xaas.msk.bizmrg.com, доверенный сертификат и публичный адрес. В плане Кластер используется вместе с включенной опцией Общий адрес консоли. Без домена консоль доступна из сети клиентов и защищена сертификатом внутреннего центра сертификации.
  9. Нажмите кнопку Следующий шаг.

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

  11. Нажмите кнопку Следующий шаг.

  12. Ознакомьтесь со стоимостью инфраструктуры для развертывания сервиса и нажмите кнопку Подключить тариф.

    Начнется развертывание облачной инфраструктуры, и откроется страница свойств сервиса. Статус процесса будет отображаться также в разделе Магазин приложений → Мои сервисы.

    После успешного развертывания на почту, привязанную к вашему аккаунту в VK Cloud, придут сообщения:

    • уведомление со ссылкой на инстанс сервиса в личном кабинете VK Cloud;
    • письмо с одноразовой ссылкой на данные для доступа к сервису.
  13. Перейдите по одноразовой ссылке из письма и сохраните данные для доступа к сервису:

    • bootstrapServers — адреса брокеров для подключения клиентов. Адреса указаны в параметре через запятую без пробелов.
    • externalBootstrapServers — адреса брокеров для подключения из интернета, если включена опция Доступ из интернета.
    • clusterCA — сертификат центра сертификации кластера.
    • adminUser, adminPassword — учетная запись администратора.
    • appUser, appPassword — учетная запись для приложений (чтение и запись в существующие топики).
    • monitoringUser, monitoringPassword — учетная запись для мониторинга (только чтение метаданных).
    • sshUser — пользователь для SSH-доступа.
    • sshKey — приватный SSH-ключ.
    • consoleURL — адрес веб-консоли.
    • consoleUser, consolePassword — учетные данные веб-консоли.

2. Настройте подключение клиента

  1. Сохраните сертификат clusterCA в файл kafka-ca.pem.

  2. Добавьте сертификат в хранилище доверия клиента:

    keytool -import -alias kafka-ca -file kafka-ca.pem \   -keystore kafka-truststore.p12 -storetype PKCS12 \   -storepass <ПАРОЛЬ> -noprompt

    Здесь <ПАРОЛЬ> — пароль для хранилища доверия, который вы задаете самостоятельно.

  3. Убедитесь, что используете версию клиентской библиотеки Kafka не ниже 2.1.

  4. Создайте файл client.properties с настройками подключения клиента:

    security.protocol=SASL_SSLsasl.mechanism=SCRAM-SHA-512sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \  username="<ЛОГИН_ПРИЛОЖЕНИЯ>" \  password="<ПАРОЛЬ_ПРИЛОЖЕНИЯ>";ssl.truststore.location=kafka-truststore.p12ssl.truststore.password=<ПАРОЛЬ>ssl.truststore.type=PKCS12

    Здесь:

    • <ЛОГИН_ПРИЛОЖЕНИЯ>, <ПАРОЛЬ_ПРИЛОЖЕНИЯ> — учетные данные приложения appUser и appPassword из письма.
    • <ПАРОЛЬ> — пароль хранилища доверия, заданный на предыдущем шаге.
  5. Проверьте созданное подключение к кластеру:

    kafka-broker-api-versions.sh --bootstrap-server <АДРЕСА_БРОКЕРОВ> --command-config client.properties

    Здесь:

    • <АДРЕСА_БРОКЕРОВ> — значения из параметра bootstrapServers из письма. Если адресов несколько, они указываются через запятую без пробелов.
    • client.properties — созданный файл с настройками подключения клиента.

    Если команда вернула список поддерживаемых API-версий, подключение настроено корректно.

3. Создайте топик

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

  1. Создайте файл admin.properties и скопируйте в него содержимое файла client.properties, заменив в параметре sasl.jaas.config значения логина и пароля на adminUser и adminPassword из письма.

  2. Создайте топик:

    kafka-topics.sh --bootstrap-server <АДРЕСА_БРОКЕРОВ> --command-config admin.properties --create --topic <ИМЯ_ТОПИКА> --partitions 6

    Здесь:

    • <АДРЕСА_БРОКЕРОВ> — значения из параметра bootstrapServers из письма. Если адресов несколько, они указываются через запятую без пробелов.
    • admin.properties — созданный файл с настройками подключения администратора.
    • <ИМЯ_ТОПИКА> — имя вашего топика. Далее для примера используется имя orders.
    • 6 — число партиций; укажите значение, кратное числу брокеров и с запасом.

4. Отправьте и прочитайте тестовые сообщения

  1. Отправьте тестовые сообщения в топик orders:

    kafka-console-producer.sh --bootstrap-server <АДРЕСА_БРОКЕРОВ> --producer.config client.properties --topic orders

    Здесь:

    • <АДРЕСА_БРОКЕРОВ> — значения из параметра bootstrapServers из письма. Если адресов несколько, они указываются через запятую без пробелов.
    • client.properties — созданный файл с настройками подключения клиента.

    Введите несколько сообщений, каждое с новой строки. Нажмите Ctrl+C для завершения.

  2. Прочитайте сообщения из топика orders:

    kafka-console-consumer.sh --bootstrap-server <АДРЕСА_БРОКЕРОВ> --consumer.config client.properties --topic orders --from-beginning

5. Используйте веб-консоль

Если при развертывании сервиса вы включили опцию Веб-консоль, то можно обращаться к сервису через веб-консоль Kafbat UI. Протестируйте ее:

  1. Перейдите в веб-консоль по адресу consoleURL из письма.
  2. Для авторизации укажите учетные данные consoleUser и consolePassword из письма.

6. (Опционально) Увеличьте размер диска данных

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

Для этого выберите диск с именем <id>-kafka-data-N, где <id> — идентификатор инстанса, N — номер узла. После изменения требуется перезагрузка ВМ. В кластере перезагружайте узлы по одному.

7. (Опционально) Настройте мониторинг

В веб-консоли в виде графиков видны текущие показатели работы брокеров вашего кластера Kafka. Для сохранения истории изменения метрик и настройки оповещений подключите к сервису Apache Kafka вашу систему мониторинга.

Метрики брокера и узла отдаются в формате Prometheus на портах 9404 и 9100 и доступны из сети клиентов.

Чтобы настроить сбор метрик:

  1. Настройте доступ к узлу и брокеру по SSH:

    1. Сохраните SSH-ключ из письма в файл ~/.ssh/kafka.pem.

    2. Установите права на файл:

      chmod 600 ~/.ssh/kafka.pem
    3. Подключитесь к узлу развернутого сервиса Apache Kafka:

      ssh -i ~/.ssh/kafka.pem almalinux@<АДРЕС_УЗЛА>

      Здесь <АДРЕС_УЗЛА> — IP-адрес нужного вам узла из параметра bootstrapServers из письма.

    После входа в систему все утилиты управления Kafka находятся в директории /opt/kafka/bin. Они могут понадобиться, например, для сбора информации о свободном месте на диске с данными.

  2. Настройте вашу систему мониторинга для сбора данных с узла. Например:

    curl -s http://<АДРЕС_УЗЛА>:9100/metrics | grep 'node_filesystem_avail_bytes.*/var/lib/kafka'

    Здесь:

    • <АДРЕС_УЗЛА> — IP-адрес нужного вам узла; значение из параметра bootstrapServers из письма.
    • 9100 — номер порта для сбора мониторинга с узла.
    • node_filesystem_avail_bytes — метрика, отображающая размер свободного места на диске с данными.
    • /var/lib/kafka — путь к директории, где расположена файловая система на узле.

    В выводе будет отображен размер свободного места на диске с данными.

    Вы также можете собирать на узле и другие метрики Prometheus, например:

    • kafka_controller_kafkacontroller_activecontrollercount;
    • kafka_controller_kafkacontroller_offlinepartitionscount;
    • kafka_server_replicamanager_underreplicatedpartitions;
    • kafka_cluster_partition_underminisr.

    Подробнее об этом в официальной документации Apache Kafka.

  3. Настройте вашу систему мониторинга для сбора данных с брокера:

    1. Создайте файл monitoring.properties и скопируйте в него содержимое файла client.properties, заменив в параметре sasl.jaas.config значения логина и пароля на monitoringUser и monitoringPassword из письма.

    2. Получите данные обо всех группах потребителей с помощью утилиты kafka-consumer-groups.sh:

      kafka-consumer-groups.sh --bootstrap-server <АДРЕСА_БРОКЕРОВ> --command-config monitoring.properties --describe --all-groups

      Здесь:

      • <АДРЕСА_БРОКЕРОВ> — значения из параметра bootstrapServers из письма. Если адресов несколько, они указываются через запятую без пробелов.
      • monitoring.properties — созданный файл с настройками подключения мониторинга.
      • --describe — опция для отображения информации.
      • --all-groups — опция вывода информации по всем группам потребителей.
    3. Ознакомьтесь с полученной информацией. Обычно вывод включает следующие колонки:

      • GROUP: имя группы потребителей.
      • TOPIC: название темы (топика), которую читает группа.
      • PARTITION: номер партиции (раздела) внутри темы.
      • CURRENT-OFFSET: текущее смещение (номер последнего прочитанного сообщения) для каждой партиции.
      • LOG-END-OFFSET: смещение последнего сообщения, которое было записано в эту партицию (то есть где сейчас «хвост» данных).
      • LAG: разница между LOG-END-OFFSET и CURRENT-OFFSET. Это самая важная цифра. Она показывает, сколько сообщений еще не прочитано. Если LAG растет — потребители не успевают читать данные (проблема с производительностью или зависанием). Если LAG равен 0 — все сообщения прочитаны, группа в реальном времени.
      • OWNER: имя процесса (потребителя), который сейчас является лидером для этой партиции.
      • HOST: IP-адрес или имя узла, где работает этот потребитель.
Была ли статья полезна?