Миграция базы данных из стороннего кластера Apache Kafka® в Yandex Managed Service for Apache Kafka®
Примечание
В регионе Казахстан доступна только зона доступности kz1-a.
Перенести топики из кластера-источника Apache Kafka® в кластер-приемник Managed Service for Apache Kafka® можно двумя способами:
-
С помощью встроенного в Yandex Managed Service for Apache Kafka® MirrorMaker-коннектора.
Этот способ прост в настройке и не требует создания промежуточной виртуальной машины.
-
С помощью утилиты MirrorMaker 2.0.
Для этого потребуется самостоятельная инсталляция и настройка утилиты на промежуточной виртуальной машине. Используйте этот способ только в том случае, если перенос данных с помощью встроенного MirrorMaker-коннектора по каким-либо причинам невозможен.
Оба способа подойдут в том числе для миграции кластера Managed Service for Apache Kafka® с одним хостом в другую зону доступности.
Перенос данных с использованием сервиса Yandex Managed Service for Apache Kafka® Connector
Чтобы перенести данные с использованием сервиса Yandex Managed Service for Apache Kafka® Connector:
- Подготовьте кластер-источник.
- Создайте кластер-приемник и коннектор.
- Проверьте наличие данных в топике кластера-приемника.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
- Кластер Managed Service for Apache Kafka®: использование выделенных хостам вычислительных ресурсов, объем хранилища и резервных копий (см. тарифы Managed Service for Apache Kafka®).
- Публичные IP-адреса, если для хостов кластера включен публичный доступ (см. тарифы Virtual Private Cloud).
Подготовьте кластер-источник
- Создайте пользователя
admin-sourceи назначьте ему рольACCESS_ROLE_ADMINна все топики (*). - Убедитесь, что настройки сети, в которой размещен кластер-источник, разрешают подключение к нему из интернета.
Создайте кластер-приемник и коннектор
-
Подготовьте кластер-приемник:
- Создайте пользователя с именем
admin-cloud. - Создайте топик с произвольными настройками. Он понадобится только для настройки доступа пользователя к топикам.
- Назначьте пользователю роль
ACCESS_ROLE_ADMINна все топики (*). - Включите настройку Auto create topics enable.
- Настройте группы безопасности для подключения к кластеру-приемнику.
- Создайте пользователя с именем
-
Создайте для кластера-приемника коннектор с типом
MirrorMakerи настройками:-
Топики — список топиков, которые нужно перенести. Также можно указать регулярное выражение для выбора топиков. Для переноса всех топиков укажите
.*. -
В блоке Кластер-источник укажите параметры для подключения к кластеру-источнику:
-
Псевдоним — префикс для обозначения кластера-источника в настройках коннектора. По умолчанию
source. Топики в кластере-приемнике будут созданы с указанным префиксом. -
Бутстрап-серверы — разделенный запятыми список FQDN хостов-брокеров кластера-источника с номерами портов, например:
FQDN_1:9091,FQDN_2:9091,...,FQDN_N:9091 -
SASL механизм — механизм шифрования имени и пароля
SCRAM-SHA-512. -
SASL имя пользователя, SASL пароль — имя и пароль созданного ранее пользователя
admin-source. -
Протокол безопасности — выберите протокол подключения коннектора:
SASL_PLAINTEXT— если к кластеру-источнику подключаются без SSL;SASL_SSL– если к кластеру-источнику подключаются с SSL.
-
-
В блоке Кластер-приёмник выберите опцию Использовать этот кластер.
-
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации kafka-mirrormaker-connector.tf
.В этом файле описаны:
- сеть;
- подсеть;
- группа безопасности по умолчанию и правила, необходимые для подключения к кластеру из интернета;
- кластер-приемник Managed Service for Apache Kafka® с включенной настройкой Auto create topics enable;
- пользователь-администратор
admin-cloudдля кластера-приемника; - MirrorMaker-коннектор для кластера-приемника.
-
Укажите в файле
kafka-mirrormaker-connector.tf:- имя пользователя кластера-источника и пароли для пользователей кластера-источника и кластера-приемника;
- FQDN хостов-брокеров кластера-источника;
- псевдонимы кластера-источника и кластера-приемника;
- шаблон фильтрации для переносимых топиков;
- версию Apache Kafka®.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Примечание
После создания коннектор автоматически активируется, и начнется перенос данных.
Проверьте наличие данных в топике кластера-приемника
-
В консоли управления
откройте кластер-приемник. -
Убедитесь, что на вкладке Топики отображается перенесенный топик.
К имени топика будет добавлен префикс, по умолчанию —
source. Например, топикmytopicбудет перенесен на кластер-приемник какsource.mytopic. -
Подключитесь к топику кластера-приемника с помощью утилиты kafkacat. К имени топика кластера-источника добавьте префикс.
-
Убедитесь, что в консоли отображаются сообщения из топика кластера-источника.
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
Удалите кластер Yandex Managed Service for Apache Kafka®. Коннектор удалится вместе с кластером.
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy -
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-
Перенос данных с использованием утилиты MirrorMaker
Чтобы перенести данные с использованием утилиты MirrorMaker:
- Подготовьте инфраструктуру.
- Настройте кластер-источник и ВМ.
- Настройте конфигурацию MirrorMaker.
- Запустите репликацию.
- Проверьте наличие данных в топике кластера-приемника.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
- Кластер Managed Service for Apache Kafka®: использование выделенных хостам вычислительных ресурсов, объем хранилища и резервных копий (см. тарифы Managed Service for Apache Kafka®).
- Публичные IP-адреса, если для хостов кластера включен публичный доступ (см. тарифы Virtual Private Cloud).
- Виртуальная машина: использование вычислительных ресурсов, хранилища, публичного IP-адреса и операционной системы (см. тарифы Compute Cloud).
Подготовьте инфраструктуру
-
Создайте кластер-приемник Managed Service for Apache Kafka®.
-
Подготовьте кластер-приемник:
- Создайте пользователя с именем
admin-cloud. - Создайте топик с произвольными настройками. Он понадобится только для настройки доступа пользователя к топикам.
- Назначьте пользователю роль
ACCESS_ROLE_ADMINна все топики (*). - Включите настройку Auto create topics enable.
- Настройте группы безопасности для подключения к кластеру-приемнику.
- Создайте пользователя с именем
-
Создайте новую ВМ Linux для MirrorMaker в той же сети, к которой подключен кластер-приемник.
Чтобы подключаться к виртуальной машине через интернет:
- Включите публичный доступ при создании ВМ.
- Убедитесь, что группа безопасности ВМ разрешает подключение к ней через интернет.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации kafka-mirror-maker.tf
.В этом файле описаны:
- сеть;
- подсеть;
- группа безопасности по умолчанию и правила, необходимые для подключения к кластеру и виртуальной машине из интернета;
- кластер Managed Service for Apache Kafka® с включенной настройкой Auto create topics enable;
- пользователь-администратор Apache Kafka®
admin-cloud, которому назначена рольACCESS_ROLE_ADMINна все топики кластера; - виртуальная машина с публичным доступом из интернета.
-
Укажите в файле
kafka-mirror-maker.tf:- Имя кластера Managed Service for Apache Kafka®
- Пароль пользователя-администратора Apache Kafka®.
- Идентификатор публичного образа с Ubuntu без GPU, например Ubuntu 24.04 LTS.
- Логин и путь к файлу открытого ключа, которые будут использоваться для доступа к виртуальной машине.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Настройте кластер-источник и ВМ
-
Подготовьте кластер-источник:
- Создайте в кластере-источнике пользователя
admin-sourceи назначьте ему рольACCESS_ROLE_ADMINна все топики (*). - Включите настройку
Auto create topics enable.
- Создайте в кластере-источнике пользователя
-
Подключитесь к виртуальной машине по SSH.
-
Установите JDK:
sudo apt update && sudo apt install --yes default-jdk -
Скачайте
и распакуйте архив Apache Kafka® той же версии, которая установлена на кластере-приемнике. Например, для версии 3.9:wget https://archive.apache.org/dist/kafka/3.9.0/kafka_2.12-3.9.0.tgz && \ tar -xvf kafka_2.12-3.9.0.tgz -
Скачайте SSL-сертификат для подключения к кластеру Managed Service for Apache Kafka®:
sudo mkdir -p /usr/local/share/ca-certificates/Yandex && \ sudo wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" \ --output-document /usr/local/share/ca-certificates/Yandex/YandexInternalRootCA.crt && \ sudo chmod 0655 /usr/local/share/ca-certificates/Yandex/YandexInternalRootCA.crt -
Установите утилиту kafkacat
:sudo apt update && sudo apt install --yes kafkacat
-
-
Настройте межсетевой экран (firewall) и группы безопасности, если это требуется для подключения MirrorMaker к кластеру-приемнику и кластеру-источнику.
Настройте конфигурацию MirrorMaker
-
В домашней директории создайте каталог
mirror-makerдля хранения сертификатов Java Keystore и конфигураций MirrorMaker:mkdir --parents /home/<домашняя_директория>/mirror-maker -
Выберите пароль для хранилища сертификатов не короче 6 символов, создайте хранилище и добавьте в него SSL-сертификат для подключения к кластеру:
sudo keytool --noprompt -importcert -alias YandexCA \ -file /usr/local/share/ca-certificates/Yandex/YandexInternalRootCA.crt \ -keystore /home/<домашняя_директория>/mirror-maker/keystore \ -storepass <пароль_хранилища_сертификатов> -
Создайте в каталоге
mirror-makerфайл конфигурации MirrorMakermm2.properties:# Kafka clusters clusters=source, cloud source.bootstrap.servers=<FQDN_брокера_кластера-источника>:9091 cloud.bootstrap.servers=<FQDN_брокера_1_кластера-приемника>:9091, ..., <FQDN_брокера_N_кластера-приемника>:9091 # Source and target cluster settings source->cloud.enabled=true cloud->source.enabled=false source.cluster.alias=source cloud.cluster.alias=cloud # Internal topics settings source.config.storage.replication.factor=<R> source.status.storage.replication.factor=<R> source.offset.storage.replication.factor=<R> source.offsets.topic.replication.factor=<R> source.errors.deadletterqueue.topic.replication.factor=<R> source.offset-syncs.topic.replication.factor=<R> source.heartbeats.topic.replication.factor=<R> source.checkpoints.topic.replication.factor=<R> source.transaction.state.log.replication.factor=<R> cloud.config.storage.replication.factor=<R> cloud.status.storage.replication.factor=<R> cloud.offset.storage.replication.factor=<R> cloud.offsets.topic.replication.factor=<R> cloud.errors.deadletterqueue.topic.replication.factor=<R> cloud.offset-syncs.topic.replication.factor=<R> cloud.heartbeats.topic.replication.factor=<R> cloud.checkpoints.topic.replication.factor=<R> cloud.transaction.state.log.replication.factor=<R> # Topics topics=.* groups=.* topics.blacklist=.*[\-\.]internal, .*\replica, __consumer_offsets groups.blacklist=console-consumer-.*, connect-.*, __.* replication.factor=<M> refresh.topics.enable=true sync.topic.configs.enabled=true refresh.topics.interval.seconds=10 # Tasks tasks.max=<T> # Source cluster authentication parameters. Comment out if no authentication required source.client.id=mm2_consumer_test source.group.id=mm2_consumer_group source.security.protocol=SASL_PLAINTEXT source.sasl.mechanism=SCRAM-SHA-512 source.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin-source" password="<пароль>"; # Target cluster authentication parameters cloud.client.id=mm2_producer_test cloud.group.id=mm2_producer_group cloud.ssl.enabled.protocols=TLSv1.2,TLSv1.1,TLSv1 cloud.ssl.truststore.location=/home/<домашняя_директория>/mirror-maker/keystore cloud.ssl.truststore.password=<пароль_хранилища_сертификатов> cloud.ssl.protocol=TLS cloud.security.protocol=SASL_SSL cloud.sasl.mechanism=SCRAM-SHA-512 cloud.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin-cloud" password="<пароль>"; # Enable heartbeats and checkpoints source->target.emit.heartbeats.enabled=true source->target.emit.checkpoints.enabled=trueПояснения к конфигурации MirrorMaker:
- Выполняется односторонняя репликация (параметры
source->cloud.enabled = true,cloud->source.enabled = false). - В параметре
topicsуказывается список топиков, которые нужно перенести. Также можно указать регулярное выражение для выбора топиков. Для переноса всех топиков укажите.*. В данной конфигурации реплицируются все топики. - Названия топиков в кластере-приемнике совпадают с их названиями в кластере-источнике.
- Параметр
<R>— фактор репликации служебных топиков MirrorMaker. Значение этого параметра не должно превышать меньшего между количеством брокеров в кластере-источнике и количеством брокеров в кластере-приемнике. - Параметр
<M>— фактор репликации по умолчанию, установленный для топиков в кластере-приемнике. - Параметр
<T>— количество одновременно работающих процессов MirrorMaker. Рекомендуется указывать не менее2для равномерного распределения нагрузки репликации. Подробнее в документации Apache Kafka® .
FQDN брокеров Managed Service for Apache Kafka® можно запросить со списком хостов в кластере.
- Выполняется односторонняя репликация (параметры
Запустите репликацию
-
Запустите MirrorMaker на ВМ командой:
<путь_установки_Apache_Kafka>/bin/connect-mirror-maker.sh /home/<домашняя_директория>/mirror-maker/mm2.properties
Проверьте наличие данных в топике кластера-приемника
-
В консоли управления
откройте кластер-приемник. -
Убедитесь, что на вкладке Топики отображается перенесенный топик.
К имени топика будет добавлен префикс, по умолчанию —
source. Например, топикmytopicбудет перенесен на кластер-приемник какsource.mytopic. -
Подключитесь к топику кластера-приемника с помощью утилиты kafkacat. К имени топика кластера-источника добавьте префикс.
-
Убедитесь, что в консоли отображаются сообщения из топика кластера-источника.
Подробнее о работе с сервисом MirrorMaker 2.0 в документации Apache Kafka®
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
- Удалите кластер Yandex Managed Service for Apache Kafka®.
- Удалите виртуальную машину.
- Если вы зарезервировали публичные статические IP-адреса, освободите и удалите их
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy -
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-