Установка и настройка сервиса Apache Kafka
Вы можете развернуть кластер Apache Kafka на выделенных виртуальных машинах в VK Cloud. Кластер использует современную встроенную систему управления метаданными (KRaft) и не зависит от сервиса ZooKeeper.
Для обеспечения безопасности коммуникации и управления доступом в кластере Kafka применяется комплексный подход: все данные между клиентом и брокером передаются в зашифрованном виде через протокол TLS, а подлинность пользователей проверяется с помощью алгоритма SCRAM-SHA-512. Для минимизации рисков права доступа разделены: у администратора, приложений и систем мониторинга есть собственные изолированные учетные записи с разными уровнями привилегий.
Пройдя все шаги инструкции, вы:
- Развернете кластер Apache Kafka.
- Настроите и проверите подключение клиента к кластеру.
- Создадите топик и отправите тестовые сообщения.
- Ознакомитесь с веб-консолью Kafbat UI.
- Подключитесь к узлам по SSH и настроите мониторинг.
Используя сервис Apache Kafka, вы соглашаетесь с лицензионными соглашениями Marketplace VK Cloud и Apache Kafka.
-
Зарегистрируйтесь в VK Cloud и перейдите в личный кабинет.
-
Настройте сеть, чтобы иметь доступ к сервису из интернета:
- Создайте сеть с доступом в интернет, если это еще не сделано.
- В настройках подсети, где будут размещены ВМ с развернутым сервисом, отключите опцию Приватный DNS.
-
В личном кабинете VK Cloud перейдите в раздел Магазин приложений.
-
Нажмите на карточку сервиса Apache Kafka.
Если на странице нет карточки сервиса Apache Kafka, нажмите кнопку Все решения и найдите карточку в каталоге.
-
На вкладке Тарифные планы выберите версию сервиса из списка.
-
Выберите подходящий тариф:
- Один узел — сервис разворачивается на одной ВМ, фактор репликации — 1. Подходит для разработки простых проектов, демонстраций или тестирования.
- Кластер — сервис разворачивается на трех, пяти или семи узлах, фактор репликации — 3. Первые 3 узла образуют кворум KRaft, остальные работают брокерами. Узлы распределяются по зонам доступности
MS1,ME1иPA2. Подходит для решения реальных бизнес-задач, где важна высокая доступность.
-
Укажите параметры ВМ, на которых будет развернут сервис:
- Число узлов (только для тарифа Кластер): выберите 3, 5 или 7 узлов.
- Тип машины: выберите конфигурацию ВМ из списка — от
2-8до16-64, где первое число задает количество ядер, второе — объем памяти в гигабайтах. Для промышленной нагрузки выбирайте от 4 vCPU и 16 ГБ RAM. - Сеть: выберите ранее созданную сеть с доступом в интернет и подсеть с отключенной опцией Приватный DNS.
-
Укажите параметры системного диска и диска с данными:
- Размер диска: укажите нужный размер диска ВМ в гигабайтах.
- Тип диска: выберите один из типов диска —
HDD,SSDилиHigh-IOPS SSD.
-
Нажмите кнопку Следующий шаг.
-
Настройте параметры доступа:
- Сеть клиентов: укажите значение
subnet, чтобы открыть брокеры только из выбранной подсети, либо задайте диапазон сети, в которой работают приложения. Метрики отдаются без пароля, поэтому диапазон лучше сузить. - Доступ из интернета: включите опцию, чтобы иметь доступ к сервису из интернета. В этом случае каждый узел получит публичный адрес и доменное имя. Для подключения используется порт
9094. - Веб-консоль: включите доступ к странице в браузере для просмотра топиков, сообщений и групп потребителей. Этот параметр можно изменить после развертывания.
- Управление из консоли (только если включена опция Веб-консоль): включите опцию, чтобы разрешить управление топиками из консоли. Режим можно изменить после развертывания.
- Общий адрес консоли (только для тарифа Кластер): включите опцию, чтобы обращаться к консоли по общему адресу через балансировщик нагрузки. Если опция отключена, адресов у консоли столько же, сколько узлов с консолью. Каждая консоль видит весь кластер. Этот параметр можно задать только при развертывании сервиса, изменить его потом нельзя.
- Домен и сертификат консоли: включите опцию, чтобы консоль получила доменное имя в зоне
xaas.msk.bizmrg.com, доверенный сертификат и публичный адрес. В плане Кластер используется вместе с включенной опцией Общий адрес консоли. Без домена консоль доступна из сети клиентов и защищена сертификатом внутреннего центра сертификации.
- Сеть клиентов: укажите значение
-
Нажмите кнопку Следующий шаг.
-
На шаге Параметры Kafka задайте нужные параметры работы сервиса Kafka, либо оставьте значения по умолчанию. Они подходят для начала работы.
-
Нажмите кнопку Следующий шаг.
-
Ознакомьтесь со стоимостью инфраструктуры для развертывания сервиса и нажмите кнопку Подключить тариф.
Начнется развертывание облачной инфраструктуры, и откроется страница свойств сервиса. Статус процесса будет отображаться также в разделе Магазин приложений → Мои сервисы.
После успешного развертывания на почту, привязанную к вашему аккаунту в VK Cloud, придут сообщения:
- уведомление со ссылкой на инстанс сервиса в личном кабинете VK Cloud;
- письмо с одноразовой ссылкой на данные для доступа к сервису.
-
Перейдите по одноразовой ссылке из письма и сохраните данные для доступа к сервису:
bootstrapServers— адреса брокеров для подключения клиентов. Адреса указаны в параметре через запятую без пробелов.externalBootstrapServers— адреса брокеров для подключения из интернета, если включена опция Доступ из интернета.clusterCA— сертификат центра сертификации кластера.adminUser,adminPassword— учетная запись администратора.appUser,appPassword— учетная запись для приложений (чтение и запись в существующие топики).monitoringUser,monitoringPassword— учетная запись для мониторинга (только чтение метаданных).sshUser— пользователь для SSH-доступа.sshKey— приватный SSH-ключ.consoleURL— адрес веб-консоли.consoleUser,consolePassword— учетные данные веб-консоли.
-
Сохраните сертификат
clusterCAв файлkafka-ca.pem. -
Добавьте сертификат в хранилище доверия клиента:
keytool -import -alias kafka-ca -file kafka-ca.pem \-keystore kafka-truststore.p12 -storetype PKCS12 \-storepass <ПАРОЛЬ> -nopromptЗдесь
<ПАРОЛЬ>— пароль для хранилища доверия, который вы задаете самостоятельно. -
Убедитесь, что используете версию клиентской библиотеки Kafka не ниже
2.1. -
Создайте файл
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из письма.<ПАРОЛЬ>— пароль хранилища доверия, заданный на предыдущем шаге.
-
Проверьте созданное подключение к кластеру:
kafka-broker-api-versions.sh --bootstrap-server <АДРЕСА_БРОКЕРОВ> --command-config client.propertiesЗдесь:
<АДРЕСА_БРОКЕРОВ>— значения из параметраbootstrapServersиз письма. Если адресов несколько, они указываются через запятую без пробелов.client.properties— созданный файл с настройками подключения клиента.
Если команда вернула список поддерживаемых API-версий, подключение настроено корректно.
Учетная запись appUser может читать и писать в существующие топики, но не может их создавать. Для создания топика используйте учетную запись администратора.
-
Создайте файл
admin.propertiesи скопируйте в него содержимое файлаclient.properties, заменив в параметреsasl.jaas.configзначения логина и пароля наadminUserиadminPasswordиз письма. -
Создайте топик:
kafka-topics.sh --bootstrap-server <АДРЕСА_БРОКЕРОВ> --command-config admin.properties --create --topic <ИМЯ_ТОПИКА> --partitions 6Здесь:
<АДРЕСА_БРОКЕРОВ>— значения из параметраbootstrapServersиз письма. Если адресов несколько, они указываются через запятую без пробелов.admin.properties— созданный файл с настройками подключения администратора.<ИМЯ_ТОПИКА>— имя вашего топика. Далее для примера используется имяorders.6— число партиций; укажите значение, кратное числу брокеров и с запасом.
-
Отправьте тестовые сообщения в топик
orders:kafka-console-producer.sh --bootstrap-server <АДРЕСА_БРОКЕРОВ> --producer.config client.properties --topic ordersЗдесь:
<АДРЕСА_БРОКЕРОВ>— значения из параметраbootstrapServersиз письма. Если адресов несколько, они указываются через запятую без пробелов.client.properties— созданный файл с настройками подключения клиента.
Введите несколько сообщений, каждое с новой строки. Нажмите
Ctrl+Cдля завершения. -
Прочитайте сообщения из топика
orders:kafka-console-consumer.sh --bootstrap-server <АДРЕСА_БРОКЕРОВ> --consumer.config client.properties --topic orders --from-beginning
Если при развертывании сервиса вы включили опцию Веб-консоль, то можно обращаться к сервису через веб-консоль Kafbat UI. Протестируйте ее:
- Перейдите в веб-консоль по адресу
consoleURLиз письма. - Для авторизации укажите учетные данные
consoleUserиconsolePasswordиз письма.
Через мастер конфигурации тарифа размер диска данных изменить нельзя, но после развертывания его можно увеличить вручную.
Для этого выберите диск с именем <id>-kafka-data-N, где <id> — идентификатор инстанса, N — номер узла. После изменения требуется перезагрузка ВМ. В кластере перезагружайте узлы по одному.
В веб-консоли в виде графиков видны текущие показатели работы брокеров вашего кластера Kafka. Для сохранения истории изменения метрик и настройки оповещений подключите к сервису Apache Kafka вашу систему мониторинга.
Метрики брокера и узла отдаются в формате Prometheus на портах 9404 и 9100 и доступны из сети клиентов.
Чтобы настроить сбор метрик:
-
Настройте доступ к узлу и брокеру по SSH:
-
Сохраните SSH-ключ из письма в файл
~/.ssh/kafka.pem. -
Установите права на файл:
chmod 600 ~/.ssh/kafka.pem -
Подключитесь к узлу развернутого сервиса Apache Kafka:
ssh -i ~/.ssh/kafka.pem almalinux@<АДРЕС_УЗЛА>Здесь
<АДРЕС_УЗЛА>— IP-адрес нужного вам узла из параметраbootstrapServersиз письма.
После входа в систему все утилиты управления Kafka находятся в директории
/opt/kafka/bin. Они могут понадобиться, например, для сбора информации о свободном месте на диске с данными. -
-
Настройте вашу систему мониторинга для сбора данных с узла. Например:
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.
-
Настройте вашу систему мониторинга для сбора данных с брокера:
-
Создайте файл
monitoring.propertiesи скопируйте в него содержимое файлаclient.properties, заменив в параметреsasl.jaas.configзначения логина и пароля наmonitoringUserиmonitoringPasswordиз письма. -
Получите данные обо всех группах потребителей с помощью утилиты
kafka-consumer-groups.sh:kafka-consumer-groups.sh --bootstrap-server <АДРЕСА_БРОКЕРОВ> --command-config monitoring.properties --describe --all-groupsЗдесь:
<АДРЕСА_БРОКЕРОВ>— значения из параметраbootstrapServersиз письма. Если адресов несколько, они указываются через запятую без пробелов.monitoring.properties— созданный файл с настройками подключения мониторинга.--describe— опция для отображения информации.--all-groups— опция вывода информации по всем группам потребителей.
-
Ознакомьтесь с полученной информацией. Обычно вывод включает следующие колонки:
GROUP: имя группы потребителей.TOPIC: название темы (топика), которую читает группа.PARTITION: номер партиции (раздела) внутри темы.CURRENT-OFFSET: текущее смещение (номер последнего прочитанного сообщения) для каждой партиции.LOG-END-OFFSET: смещение последнего сообщения, которое было записано в эту партицию (то есть где сейчас «хвост» данных).LAG: разница междуLOG-END-OFFSETиCURRENT-OFFSET. Это самая важная цифра. Она показывает, сколько сообщений еще не прочитано. ЕслиLAGрастет — потребители не успевают читать данные (проблема с производительностью или зависанием). ЕслиLAGравен0— все сообщения прочитаны, группа в реальном времени.OWNER: имя процесса (потребителя), который сейчас является лидером для этой партиции.HOST: IP-адрес или имя узла, где работает этот потребитель.
-