Обновление кластера Managed Service for Apache Kafka® с ZooKeeper на кластер с поддержкой KRaft
Примечание
В регионе Казахстан доступна только зона доступности kz1-a.
Многохостовые кластеры Managed Service for Apache Kafka® версии 3.5 и ниже используют ZooKeeper для управления метаданными. С версией Apache Kafka® 4.0 поддержка ZooKeeper прекратится. Для кластеров с хостами ZooKeeper поддерживается переход на протокол KRaft. Начиная с версии 3.6 Apache Kafka® использует KRaft как основной протокол синхронизации метаданных.
Чтобы перейти на протокол KRaft в кластере с ZooKeeper:
Если созданные ресурсы вам больше не нужны, удалите их.
Необходимые платные ресурсы
В стоимость поддержки описываемого решения входят:
- Плата за кластер Managed Service for Apache Kafka®: использование вычислительных ресурсов, выделенных хостам (в том числе хостам KRaft), и дискового пространства (см. тарифы Managed Service for Apache Kafka®).
- Плата за использование публичных IP-адресов для хостов кластеров (см. тарифы Virtual Private Cloud).
Обновите версию кластера
Обновите версию Apache Kafka® вашего кластера с ZooKeeper до версии 3.9 поэтапно, без пропуска версий. Обновление выполняется в такой последовательности: 3.5 → 3.6 → 3.7 → 3.8 → 3.9. Если версия кластера ниже 3.5, вначале обновите кластер до этой версии.
- Перейдите на страницу каталога и выберите сервис Managed Service for Kafka.
- В строке с вашим кластером нажмите на значок
, затем выберите Редактировать. - В поле Версия выберите версию 3.6.
- Нажмите кнопку Сохранить.
- Повторите действия для остальных версий Apache Kafka® в указанной последовательности.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Запустите обновление Apache Kafka® вашего кластера командой:
yc managed-kafka cluster update <имя_или_идентификатор_кластера> \ --version=3.6 -
Повторите команду для остальных версий в указанной последовательности.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
-
В блоке
configкластера Managed Service for Apache Kafka® задайте новую версию Apache Kafka® в полеversion—3.6:resource "yandex_mdb_kafka_cluster" "<имя_кластера>" { ... config { version = "3.6" } } -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
-
Повторите действия для остальных версий Apache Kafka® в указанной последовательности.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом Cluster.update и выполните запрос, например, с помощью cURL
:curl \ --request PATCH \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ -url 'https://mdb.api.yandexcloud.kz/managed-kafka/v1/clusters/<идентификатор_кластера>' \ --data '{ "updateMask": "configSpec.version", "configSpec": { "version": "3.6" } }'Где:
-
updateMask— перечень изменяемых параметров в одну строку через запятую.В данном случае указан только один параметр:
configSpec.version. -
configSpec.version— версия Apache Kafka®.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Повторите действия для остальных версий Apache Kafka® в указанной последовательности.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь вызовом ClusterService/Update и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/kafka/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "update_mask": { "paths": [ "config_spec.version" ] }, "config_spec": { "version": "3.6" } }' \ mdb.api.yandexcloud.kz:443 \ yandex.cloud.mdb.kafka.v1.ClusterService.UpdateГде:
-
update_mask— перечень изменяемых параметров в виде массива строкpaths[].В данном случае указан только один параметр:
config_spec.version. -
config_spec.version— версия Apache Kafka®.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Повторите действия для остальных версий Apache Kafka® в указанной последовательности.
Выполните миграцию кластера на протокол KRaft
Для миграции кластера Managed Service for Apache Kafka® с хостами ZooKeeper на протокол KRaft задайте конфигурацию ресурсов для контроллеров KRaft.
- Перейдите на страницу каталога и выберите сервис Managed Service for Kafka.
- Нажмите на имя нужного кластера.
- В верхней части экрана нажмите кнопку Мигрировать.
- Выберите платформу, тип хостов и класс хостов для контроллеров KRaft.
- Нажмите кнопку Сохранить.
- Дождитесь завершения миграции.
Запустите миграцию вашего кластера командой:
yc managed-kafka cluster update <имя_или_идентификатор_кластера> \
--controller-resource-preset "<класс_хостов_KRaft>" \
--controller-disk-size <размер_хранилища> \
--controller-disk-type <тип_диска>
Где:
--controller-resource-preset— класс хостов KRaft.--controller-disk-type— тип диска хостов KRaft.
Примечание
Для контроллеров KRaft:
- Доступны только типы дисков
network-ssdиnetwork-ssd-nonreplicated. - Недоступно использование платформы Intel Broadwell.
Чтобы узнать имя или идентификатор кластера, получите список кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
-
Удалите блок
config.zookeeperкластера Managed Service for Apache Kafka®. -
Добавьте блок
config.kraftс описанием ресурсов контроллеров KRaft:resource "yandex_mdb_kafka_cluster" "<имя_кластера>" { ... config { ... kraft { resources { disk_size = <размер_хранилища_ГБ> disk_type_id = "<тип_диска>" resource_preset_id = "<класс_хостов_KRaft>" } } } }Где:
kraft.resources.resource_preset_id— класс хостов KRaft.kraft.resources.disk_type_id— тип диска хостов KRaft.
Примечание
Для контроллеров KRaft:
- Доступны только типы дисков
network-ssdиnetwork-ssd-nonreplicated. - Недоступно использование платформы Intel Broadwell.
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом Cluster.update и выполните запрос, например, с помощью cURL
:curl \ --request PATCH \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ -url 'https://mdb.api.yandexcloud.kz/managed-kafka/v1/clusters/<идентификатор_кластера>' \ --data '{ "updateMask": "configSpec.kraft.resources.resourcePresetId,configSpec.kraft.resources.diskSize,configSpec.kraft.resources.diskTypeId", "configSpec": { "kraft": { "resources": { "resourcePresetId": "<класс_хостов_KRaft>", "diskSize": "<размер_хранилища_в_байтах>", "diskTypeId": "<тип_диска>" } } } }'Где:
-
updateMask— перечень изменяемых параметров в одну строку через запятую.В данном случае должны быть указаны все параметры добавляемых ресурсов:
configSpec.kraft.resources.resourcePresetId,configSpec.kraft.resources.diskSize,configSpec.kraft.resources.diskTypeId. -
configSpec.kraft— конфигурация контроллеров KRaft:resources.resourcePresetId— идентификатор класса хостов. Список доступных классов хостов с их идентификаторами можно запросить с помощью метода ResourcePreset.list.resources.diskSize— размер диска в байтах.resources.diskTypeId— тип диска.
Примечание
Для контроллеров KRaft:
- Доступны только типы дисков
network-ssdиnetwork-ssd-nonreplicated. - Недоступно использование платформы Intel Broadwell.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь вызовом ClusterService/Update и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/kafka/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "update_mask": { "paths": [ "config_spec.kraft.resources.resource_preset_id", "config_spec.kraft.resources.disk_size", "config_spec.kraft.resources.disk_type_id" ] }, "config_spec": { "kraft": { "resources": { "resource_preset_id": "<класс_хостов_KRaft>", "disk_size": "<размер_хранилища_в_байтах>", "disk_type_id": "<тип_диска>" } } } }' \ mdb.api.yandexcloud.kz:443 \ yandex.cloud.mdb.kafka.v1.ClusterService.UpdateГде:
-
update_mask— перечень изменяемых параметров в виде массива строкpaths[].В данном случае должны быть указаны все параметры добавляемых ресурсов:
config_spec.kraft.resources.resource_preset_id,config_spec.kraft.resources.disk_size,config_spec.kraft.resources.disk_type_id. -
config_spec.kraft— конфигурация контроллеров KRaft:resources.resource_preset_id— идентификатор класса хостов. Список доступных классов хостов с их идентификаторами можно запросить с помощью метода ResourcePreset.list.resources.disk_size— размер диска в байтах.resources.disk_type_id— тип диска.
Примечание
Для контроллеров KRaft:
- Доступны только типы дисков
network-ssdиnetwork-ssd-nonreplicated. - Недоступно использование платформы Intel Broadwell.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy -
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-