Перенос данных между кластерами Managed Service for Apache Kafka® с помощью Yandex Data Transfer
Данные из топиков Apache Kafka® можно переносить из одного кластера Apache Kafka® в другой в реальном времени. В том числе поддерживаются следующие виды миграции:
- Между разными версиями Apache Kafka® — например, можно перенести топики из версии 2.8 в версию 3.1.
- Между разными зонами доступности — можно перенести кластер с одним хостом из одной зоны в другую.
Зеркалирование кластеров Apache Kafka® позволяет:
- выполнить настройку репликации топиков в интерфейсе Консоли управления или в Terraform;
- следить за процессом переноса с помощью мониторинга трансфера;
- обойтись без создания промежуточной виртуальной машины или разрешения доступа к вашему кластеру-приемнику из интернета.
Примечание
В данном практическом руководстве описан сценарий миграции данных между кластерами Managed Service for Apache Kafka®.
Чтобы запустить перенос данных:
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
-
Подготовьте инфраструктуру поставки данных:
ВручнуюTerraform- Создайте кластер-источник и кластер-приемник Managed Service for Apache Kafka® любой подходящей конфигурации с публичным доступом из интернета.
- Создайте в кластере-источнике топик с именем
sensors
. - Создайте в кластере-источнике пользователя с правами доступа
ACCESS_ROLE_PRODUCER
,ACCESS_ROLE_CONSUMER
к созданному топику. - Создайте в кластере-приемнике пользователя с правами доступа
ACCESS_ROLE_PRODUCER
,ACCESS_ROLE_CONSUMER
ко всем топикам.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации data-transfer-mkf-mkf.tf
.В этом файле описаны:
- сеть;
- подсеть;
- группа безопасности и правило, необходимое для подключения к кластеру Managed Service for Apache Kafka®;
- кластер-источник Managed Service for Apache Kafka® с публичным доступом из интернета;
- топик Apache Kafka® для кластера-источника;
- пользователь Apache Kafka® для кластера-источника;
- кластер-приемник Managed Service for Apache Kafka®;
- топик Apache Kafka® для кластера-приемника;
- пользователь Apache Kafka® для кластера-приемника;
- трансфер.
-
Укажите в файле
data-transfer-mkf-mkf.tf
значения параметров:source_kf_version
— версия Apache Kafka® в кластере-источнике;source_user_name
— имя пользователя для подключения к топику Apache Kafka®;source_user_password
— пароль пользователя;target_kf_version
— версия Apache Kafka® в кластере-приемнике;transfer_enabled
— значение0
, чтобы не создавать трансфер до создания эндпоинта-приемника и эндпоинта-источника вручную.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
В созданный топик Apache Kafka®
sensors
кластера-источника будут поступать тестовые данные от сенсоров автомобиля в формате JSON, например:{ "device_id":"iv9a94th6rzt********", "datetime":"2020-06-05 17:27:00", "latitude":"55.70329032", "longitude":"37.65472196", "altitude":"427.5", "speed":"0", "battery_voltage":"23.5", "cabin_temperature":"17", "fuel_level":null }
-
Установите утилиты:
-
kafkacat
— для чтения и записи данных в топики Apache Kafka®.sudo apt update && sudo apt install --yes kafkacat
Убедитесь, что можете с ее помощью подключиться к кластеру-источнику Managed Service for Apache Kafka® через SSL.
-
jq
— для потоковой обработки JSON-файлов.sudo apt update && sudo apt-get install --yes jq
-
Подготовьте и активируйте трансфер
-
Создайте эндпоинт для приемника:
-
Тип базы данных —
Kafka
. -
Параметры эндпоинта:
-
Настройки подключения —
Кластер Managed Service for Apache Kafka
.Выберите кластер-приемник из списка и укажите настройки подключения к нему.
-
Топик:
- Полное имя топика —
measurements
.
- Полное имя топика —
-
-
-
Создайте эндпоинт для источника:
- Тип базы данных —
Kafka
. - Параметры эндпоинта:
-
Тип подключения —
Кластер Managed Service for Apache Kafka
.Выберите кластер-источник из списка и укажите настройки подключения к нему.
-
Полное имя топика —
sensors
.
-
- Тип базы данных —
-
Создайте трансфер:
ВручнуюTerraform- Создайте трансфер типа Репликация, использующий созданные эндпоинты.
- Активируйте его.
-
Укажите в файле
data-transfer-mkf-mkf.tf
значения параметров:source_endpoint_id
— значение идентификатора эндпоинта для источника;target_endpoint_id
— значение идентификатора эндпоинта для приемника;transfer_enabled
– значение1
для создания трансфера.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
Трансфер активируется автоматически после создания.
-
Проверьте работоспособность трансфера
-
Дождитесь перехода трансфера в статус Реплицируется.
-
Убедитесь, что в топик кластера-приемника переносятся данные из топика кластера-источника Managed Service for Apache Kafka®:
-
Создайте файл
sample.json
с тестовыми данными:{ "device_id": "iv9a94th6rzt********", "datetime": "2020-06-05 17:27:00", "latitude": 55.70329032, "longitude": 37.65472196, "altitude": 427.5, "speed": 0, "battery_voltage": 23.5, "cabin_temperature": 17, "fuel_level": null } { "device_id": "rhibbh3y08qm********", "datetime": "2020-06-06 09:49:54", "latitude": 55.71294467, "longitude": 37.66542005, "altitude": 429.13, "speed": 55.5, "battery_voltage": null, "cabin_temperature": 18, "fuel_level": 32 } { "device_id": "iv9a94th6rzt********", "datetime": "2020-06-07 15:00:10", "latitude": 55.70985913, "longitude": 37.62141918, "altitude": 417.0, "speed": 15.7, "battery_voltage": 10.3, "cabin_temperature": 17, "fuel_level": null }
-
Отправьте данные из файла
sample.json
в топикsensors
кластера-источника Managed Service for Apache Kafka® с помощью утилитjq
иkafkacat
:jq -rc . sample.json | kafkacat -P \ -b <FQDN_брокера_в_кластере-источнике>:9091 \ -t sensors \ -k key \ -X security.protocol=SASL_SSL \ -X sasl.mechanisms=SCRAM-SHA-512 \ -X sasl.username="<имя_пользователя_в_кластере-источнике>" \ -X sasl.password="<пароль_пользователя_в_кластере-источнике>" \ -X ssl.ca.location=/usr/local/share/ca-certificates/Yandex/YandexInternalRootCA.crt -Z
Данные отправляются от имени созданного пользователя. Подробнее о настройке SSL-сертификата и работе с
kafkacat
см. в разделе Подключение к кластеру Apache Kafka® из приложений. -
Убедитесь, что в кластер-приемник Managed Service for Apache Kafka® перенеслись данные из кластера-источника, с помощью утилиты
kafkacat
:kafkacat -C \ -b <FQDN_брокера_в_кластере-приемнике>:9091 \ -t measurements \ -X security.protocol=SASL_SSL \ -X sasl.mechanisms=SCRAM-SHA-512 \ -X sasl.username="<имя_пользователя_в_кластере-приемнике>" \ -X sasl.password="<пароль_пользователя_в_кластере-приемнике>" \ -X ssl.ca.location=/usr/local/share/ca-certificates/Yandex/YandexInternalRootCA.crt -Z -K:
-
Удалите созданные ресурсы
Примечание
Перед тем как удалить созданные ресурсы, деактивируйте трансфер.
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
- Удалите трансфер.
- Удалите эндпоинты для источника и приемника.
Остальные ресурсы удалите в зависимости от способа их создания:
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-