Миграция базы данных из стороннего кластера Apache Kafka® в Yandex Managed Service for Apache Kafka®
Перенести топики из кластера-источника 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
Создайте кластер и коннектор
-
Подготовьте кластер-приемник:
- Создайте пользователя-администратора с именем
admin-cloud
. - Включите настройку Auto create topics enable.
- Настройте группы безопасности, если это требуется для подключения к кластеру-приемнику.
- Создайте пользователя-администратора с именем
-
Создайте в кластере-источнике пользователя
admin-source
с правом управления топиками через Admin API. -
Убедитесь, что настройки сети, в которой размещен кластер-источник, разрешают подключение к нему из интернета.
-
Создайте для кластера-приемника коннектор с типом
MirrorMaker
и настройками:-
Топики — список топиков, которые нужно перенести. Также можно указать регулярное выражение для выбора топиков. Для переноса всех топиков укажите
.*
. -
В блоке Кластер-источник укажите параметры для подключения к кластеру-источнику:
-
Псевдоним — префикс для обозначения кластера-источника в настройках коннектора. По умолчанию
source
. Топики в кластере-приемнике будут созданы с указанным префиксом. -
Бутстрап-серверы — разделенный запятыми список FQDN хостов-брокеров кластера-источника с номерами портов, например:
FQDN1:9091,FQDN2:9091,...,FQDN:9091
-
SASL имя пользователя, SASL пароль — имя и пароль созданного ранее пользователя
admin-source
. -
SASL механизм — механизм шифрования имени и пароля
SCRAM-SHA-512
. -
Протокол безопасности — выберите протокол подключения коннектора:
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
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Проверьте наличие данных в топике кластера-приемника
- Подключитесь к топику кластера-приемника с помощью утилиты kafkacat. К имени топика кластера-источника добавьте префикс
source
: например, топикmytopic
будет перенесен на кластер-приемник какsource.mytopic
. - Убедитесь, что в консоли отображаются сообщения из топика кластера-источника.
Перенос данных с использованием утилиты MirrorMaker
- Настройте конфигурацию MirrorMaker.
- Запустите репликацию.
- Проверьте наличие данных в топике кластера-приемника.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Подготовьте инфраструктуру
-
Создайте кластер-приемник Managed Service for Apache Kafka®:
- С пользователем-администратором
admin-cloud
. - С включенной настройкой Auto create topics enable.
- С пользователем-администратором
-
Создайте новую ВМ Linux для MirrorMaker в той же сети, к которой подключен кластер-приемник. Для подключения к виртуальной машине с локальной машины пользователя, а не из облачной сети Yandex Cloud, включите публичный доступ при ее создании.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации kafka-mirror-maker.tf
.В этом файле описаны:
- сеть;
- подсеть;
- группа безопасности по умолчанию и правила, необходимые для подключения к кластеру и виртуальной машине из интернета;
- кластер Managed Service for Apache Kafka® с включенной настройкой Auto create topics enable;
- пользователь-администратор Apache Kafka®
admin-cloud
; - виртуальная машина с публичным доступом из интернета.
-
Укажите в файле
kafka-mirror-maker.tf
:- Версию Apache Kafka®.
- Пароль пользователя-администратора Apache Kafka®.
- Идентификатор публичного образа с Ubuntu без GPU. Например, для Ubuntu 20.04 LTS.
- Логин и путь к файлу открытого ключа, которые будут использоваться для доступа к виртуальной машине. По умолчанию в используемом образе указанный логин игнорируется, вместо него создается пользователь с логином
ubuntu
. Используйте его для подключения к виртуальной машине.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Выполните дополнительные настройки
-
Создайте в кластере-источнике пользователя
admin-source
с правом управления топиками через Admin API. -
Подключитесь к виртуальной машине по SSH.
-
Установите JDK:
sudo apt update && sudo apt install --yes default-jdk
-
Скачайте
и распакуйте архив Apache Kafka® той же версии, которая установлена на кластере-приемнике. Например, для версии 2.8:wget https://archive.apache.org/dist/kafka/2.8.0/kafka_2.12-2.8.0.tgz && \ tar -xvf kafka_2.12-2.8.0.tgz
-
Установите утилиту kafkacat
:sudo apt update && sudo apt install --yes kafkacat
Убедитесь, что можете с ее помощью подключиться к кластеру-источнику и кластеру-приемнику через SSL.
-
-
Настройте межсетевой экран (firewall) и группы безопасности, если это требуется для подключения MirrorMaker к кластеру-приемнику и кластеру-источнику.
Настройте конфигурацию MirrorMaker
-
Скачайте SSL-сертификат для подключения к кластеру Managed Service for Apache Kafka®.
-
В домашней директории создайте каталог
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=cloud, source source.bootstrap.servers=<FQDN_брокера_кластера-источника>:9092 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
Проверьте наличие данных в топике кластера-приемника
- Подключитесь к топику кластера-приемника с помощью утилиты kafkacat. К имени топика кластера-источника добавьте префикс
source
: например, топикmytopic
будет перенесен на кластер-приемник какsource.mytopic
. - Убедитесь, что в консоли отображаются сообщения из топика кластера-источника.
Подробнее о работе с сервисом MirrorMaker 2.0 см. в документации Apache Kafka®
Удалите созданные ресурсы
Удалите ресурсы, которые вы больше не будете использовать, чтобы за них не списывалась плата:
- Удалите кластер Yandex Managed Service for Apache Kafka®.
- Удалите виртуальную машину.
- Если вы зарезервировали публичные статические IP-адреса, освободите и удалите их
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-