Создание кластера Apache Kafka®
Примечание
В регионе Казахстан доступна только зона доступности kz1-a.
Примечание
В регионе Казахстан доступны только платформы standard-v3 (Intel Ice Lake) и standard-v3-t4i (Intel Ice Lake with T4i). Другие типы платформ, кластеры GPU и выделенные хосты недоступны.
Кластер Managed Service for Apache Kafka® — один или несколько хостов-брокеров, на которых размещены топики и соответствующие топикам разделы. Производители и потребители могут работать с этими топиками, подключившись к хостам кластера Managed Service for Apache Kafka®.
Примечание
Доступные типы диска зависят от выбранного класса хостов.
Различия в конфигурации кластеров с ZooKeeper и протоколом Apache Kafka® Raft
В различных версиях Apache Kafka® используются разные инструменты для хранения метаданных, состояния и конфигурации кластера:
- в версиях 3.5 и ниже поддерживается ZooKeeper;
- в версии 3.6 и до версии 3.9 (включительно) поддерживаются ZooKeeper и Apache Kafka® Raft;
- в версиях 4.0 и выше поддерживается только Apache Kafka® Raft.
Хосты с ZooKeeper
При выборе версии Apache Kafka® 3.5 и ниже поддерживается только ZooKeeper.
Если вы создаете кластер, в котором больше одного хоста, то в кластер будут добавлены три выделенных хоста ZooKeeper.
Хосты с KRaft
При выборе версии Apache Kafka® 3.6 и выше дополнительно поддерживается протокол KRaft.
Протокол KRaft доступен в одном из выбранных режимов:
-
KRaft (комбинированный режим) — на одном хосте Apache Kafka® одновременно размещаются брокер и контроллер метаданных KRaft. При этом в кластере создаются только три хоста Apache Kafka® в одной из конфигураций:
- три хоста находятся в одной зоне доступности;
- каждый хост расположен в отдельной зоне доступности.
Задать количество хостов-брокеров вручную нельзя.
-
KRaft (на отдельных хостах) — брокер и контроллер метаданных KRaft размещаются на отдельных хостах. При создании кластера с несколькими хостами, в него добавляются три выделенных хоста KRaft.
Количество хостов-брокеров задается вручную.
Хосты KRaft нельзя удалить. Количество хостов KRaft фиксировано.
Подробнее о различиях в конфигурации кластеров с ZooKeeper и KRaft см. в разделе Взаимосвязь ресурсов в Managed Service for Apache Kafka®.
Перед началом работы
- Рассчитайте минимальный размер хранилища для топиков.
- Назначьте вашему аккаунту в Yandex Cloud роль vpc.user и роль managed-kafka.editor или выше.
Если вы указываете идентификаторы групп безопасности при создании кластера Managed Service for Apache Kafka®, для подключения к нему может понадобиться дополнительная настройка групп безопасности.
Создать кластер с ZooKeeper
Важно
При создании кластера с ZooKeeper не указывайте настройки KRaft.
Чтобы создать кластер Managed Service for Apache Kafka®:
-
В консоли управления
перейдите в нужный каталог. -
В списке сервисов выберите Managed Service for Kafka.
-
Нажмите кнопку Создать кластер.
-
В блоке Базовые параметры:
- Введите имя кластера Managed Service for Apache Kafka® и его описание. Имя кластера Managed Service for Apache Kafka® должно быть уникальным в рамках каталога.
-
Выберите окружение, в котором нужно создать кластер Managed Service for Apache Kafka® (после создания кластера изменить окружение невозможно):
PRODUCTION— для стабильных версий приложений.PRESTABLE— для тестирования. Prestable-окружение аналогично Production-окружению, и на него также распространяется SLA, но при этом на нем раньше появляются новые функциональные возможности, улучшения и исправления ошибок. В Prestable-окружении вы можете протестировать совместимость новых версий с вашим приложением.
- Выберите версию Apache Kafka®.
-
В блоке Класс хоста выберите платформу, тип и класс хостов.
Класс хостов определяет технические характеристики виртуальных машин, на которых будут развернуты хосты-брокеры Apache Kafka®. Все доступные варианты перечислены в разделе Классы хостов.
При изменении класса хостов для кластера Managed Service for Apache Kafka® меняются характеристики всех уже созданных экземпляров.
-
В блоке Хранилище:
-
Выберите тип диска.
Важно
Тип диска нельзя изменить после создания кластера.
От выбранного типа зависит, с каким шагом можно будет изменить размер диска:
- Сетевые HDD- и SSD-диски — с шагом 1 ГБ.
- Локальные SSD-диски:
- для платформы Intel Cascade Lake — с шагом 100 ГБ;
- для платформы Intel Ice Lake — с шагом 368 ГБ.
- Нереплицируемые SSD-диски — с шагом 93 ГБ.
Тип диска для кластера Managed Service for Apache Kafka® нельзя изменить после создания.
-
Выберите объем хранилища, который будет использоваться для данных.
-
-
В блоке Автоматическое увеличение размера хранилища задайте пороги заполненности хранилища, при достижении которых его размер будет увеличиваться:
- В поле Увеличивать размер выберите один или оба порога:
- В окно обслуживания при заполненности более — порог для планового увеличения. Когда он достигнут, объем хранилища увеличивается во время ближайшего окна обслуживания.
- Незамедлительно при заполненности более — порог для незамедлительного увеличения. Когда он достигнут, объем хранилища увеличивается немедленно.
- Задайте пороговое значение (в процентах от общего объема хранилища). Если выбраны оба порога, значение для незамедлительного увеличения должно быть выше, чем для планового.
- Задайте Максимальный размер хранилища.
- В поле Увеличивать размер выберите один или оба порога:
-
В блоке Сетевые настройки:
-
Выберите одну или несколько зон доступности, в которых нужно разместить хосты-брокеры Apache Kafka®.
Важно
Если создать кластер Managed Service for Apache Kafka® с одной зоной доступности, в дальнейшем увеличить количество зон и хостов-брокеров будет невозможно.
-
Выберите сеть.
-
Выберите подсети в каждой зоне доступности для этой сети. Чтобы создать новую подсеть, нажмите на кнопку Создать рядом с нужной зоной доступности.
Примечание
Для кластера Apache Kafka®, в котором несколько хостов-брокеров, укажите подсети в каждой зоне доступности, даже если вы планируете разместить хосты-брокеры только в некоторых из них. Эти подсети понадобятся для размещения трех хостов ZooKeeper — по одному в каждой зоне доступности. Подробнее см. в разделе Взаимосвязь ресурсов сервиса.
-
Выберите группы безопасности для сетевого трафика кластера Managed Service for Apache Kafka®.
-
Для доступа к хостам-брокерам из интернета выберите опцию Публичный доступ. В этом случае подключаться к ним можно только с использованием SSL-соединения. Подробнее см. в разделе Подключение к топикам в кластере.
-
-
В блоке Хосты:
-
Укажите количество хостов-брокеров Apache Kafka® для размещения в каждой выбранной зоне доступности.
При выборе количества хостов учтите следующие особенности:
- Добавление в кластер более одного хоста приведет к автоматическому добавлению трех хостов ZooKeeper.
- Репликация возможна при наличии как минимум двух хостов в кластере Managed Service for Apache Kafka®.
- Для высокой доступности кластера Managed Service for Apache Kafka® должны выполняться определенные условия.
-
В качестве сервиса координации выберите ZooKeeper (на отдельных хостах).
-
-
Если вы указали более одного хоста-брокера, то в блоке Класс хоста ZooKeeper укажите характеристики хостов ZooKeeper для размещения в каждой выбранной зоне доступности.
-
При необходимости задайте дополнительные настройки кластера Managed Service for Apache Kafka®:
-
Окно обслуживания — настройки времени технического обслуживания:
- Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт произвольное (по умолчанию).
- Чтобы указать предпочтительное время начала обслуживания, выберите пункт по расписанию и укажите нужные день недели и час дня по UTC. Например, можно выбрать время, когда кластер наименее загружен.
Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать в себя: обновление СУБД, применение патчей и так далее.
-
Защита от удаления — управляет защитой кластера от непреднамеренного удаления.
Включенная защита кластера от удаления не помешает удалить пользователя или топик, а также подключиться вручную и удалить данные.
-
Чтобы управлять схемами данных с помощью Managed Schema Registry, включите настройку Реестр схем данных.
Важно
Невозможно отключить управление схемами данных с помощью Managed Schema Registry после его подключения.
-
Чтобы разрешить отправку запросов к API Apache Kafka®, включите настройку Kafka Rest API.
В качестве реализации используется приложение с открытым исходным кодом Karapace
. API Karapace совместимо с API Confluent REST Proxy за исключением небольших расхождений.Важно
Настройку Kafka Rest API невозможно отключить после ее включения.
-
Чтобы использовать веб-интерфейс Apache Kafka®, включите настройку Kafka UI.
-
-
При необходимости задайте настройки Apache Kafka®.
-
Нажмите кнопку Создать.
-
Дождитесь, когда кластер Managed Service for Apache Kafka® будет готов к работе: его статус на панели Managed Service for Apache Kafka® сменится на
Running, а состояние — наAlive. Это может занять некоторое время.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы создать кластер Managed Service for Apache Kafka®:
-
Посмотрите описание команды CLI для создания кластера Managed Service for Apache Kafka®:
yc managed-kafka cluster create --help -
Укажите параметры кластера Managed Service for Apache Kafka® в команде создания (в примере приведены не все параметры):
yc managed-kafka cluster create \ --name <имя_кластера> \ --environment <окружение> \ --version <версия> \ --schema-registry \ --network-name <имя_сети> \ --subnet-ids <идентификаторы_подсетей> \ --zone-ids <зоны_доступности> \ --brokers-count <количество_хостов-брокеров_в_зоне> \ --resource-preset <класс_хоста> \ --disk-type <network-hdd|network-ssd|network-ssd-nonreplicated|local-ssd> \ --disk-size <размер_хранилища_ГБ> \ --assign-public-ip <разрешить_публичный_доступ_к_кластеру> \ --security-group-ids <список_идентификаторов_групп_безопасности> \ --deletion-protection \ --kafka-ui-enabled <true_или_false>Где:
-
--environment— окружение кластера:prestableилиproduction. -
--version— версия Apache Kafka®: 3.5, 3.6, 3.7, 3.8 или 3.9. Дополнительно передайте конфигурацию хостов ZooKeeper. -
--schema-registry— управление схемами данных с помощью Managed Schema Registry.Важно
Невозможно отключить управление схемами данных с помощью Managed Schema Registry после его подключения.
-
--zone-idsи--brokers-count— зоны доступности и число хостов-брокеров в каждой зоне. -
--resource-preset— класс хостов. -
--disk-type— тип диска.Важно
Тип диска нельзя изменить после создания кластера.
-
--deletion-protection— защита кластера от непреднамеренного удаления:trueилиfalse.Примечание
Включенная защита кластера от удаления не помешает удалить пользователя или топик, а также подключиться вручную и удалить данные.
-
--kafka-ui-enabled— использование веб-интерфейса Kafka UI для Apache Kafka®:trueилиfalse.
Совет
При необходимости здесь же можно задать настройки Apache Kafka®.
-
-
Чтобы использовать ZooKeeper в кластере, передайте конфигурацию хостов ZooKeeper:
yc managed-kafka cluster create \ ... --zookeeper-resource-preset <класс_хоста> \ --zookeeper-disk-size <размер_хранилища_ГБ> \ --zookeeper-disk-type <network-hdd|network-ssd|network-ssd-nonreplicated|local-ssd> \ ...Где:
--zookeeper-resource-preset— класс хостов ZooKeeper.--zookeeper-disk-size— размер хранилища.--zookeeper-disk-type— тип диска ZooKeeper.
-
Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров Managed Service for Apache Kafka®), передайте нужное значение в параметре
--maintenance-windowпри создании кластера:yc managed-kafka cluster create \ ... --maintenance-window type=<тип_технического_обслуживания>,` `day=<день_недели>,` `hour=<час_дня> \ ...Где
type— тип технического обслуживания:anytime(по умолчанию) — в любое время.weekly— по расписанию. Для этого значения дополнительно укажите:day— день недели:MON,TUE,WED,THU,FRI,SATилиSUN.hour— час дня по UTC: от1до24.
-
Чтобы в кластере не заканчивалось место на диске, создайте кластер с автоматическим увеличением размера хранилища:
yc managed-kafka cluster create \ ... --disk-size-autoscaling disk-size-limit=<максимальный_размер_хранилища_в_байтах>,` `planned-usage-threshold=<процент_для_планового_увеличения>,` `emergency-usage-threshold=<процент_для_незамедлительного_увеличения> \ ...Где:
-
planned-usage-threshold— процент заполнения хранилища, при котором хранилище будет увеличено в следующее окно технического обслуживания.Значение задается в процентах от
0до100. По умолчанию —0(автоматическое расширение отключено).Если вы задали этот параметр, настройте расписание технического обслуживания.
-
emergency-usage-threshold— процент заполнения хранилища, при котором хранилище будет увеличено немедленно.Значение задается в процентах от
0до100. По умолчанию —0(автоматическое расширение отключено). Должно быть не меньше значенияplanned-usage-threshold. -
disk-size-limit— максимальный размер хранилища в байтах, который может быть установлен при достижении одного из заданных процентов заполнения.Если указать значение
0, автоматическое увеличение размера хранилища будет отключено.
Важно
- Размер хранилища нельзя уменьшить.
- Во время изменения размера хранилища хосты кластера будут недоступны.
-
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы создать кластер Managed Service for Apache Kafka®:
-
Опишите в конфигурационном файле создаваемые ресурсы:
-
Кластер Managed Service for Apache Kafka® — описание кластера и его хостов. При необходимости здесь же можно задать настройки Apache Kafka®.
-
Сеть — описание облачной сети, в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
-
Подсети — описание подсетей, к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.
Пример структуры конфигурационного файла:
resource "yandex_mdb_kafka_cluster" "<имя_кластера>" { environment = "<окружение>" name = "<имя_кластера>" network_id = "<идентификатор_сети>" subnet_ids = ["<список_идентификаторов_подсетей>"] security_group_ids = ["<список_идентификаторов_групп_безопасности_кластера>"] deletion_protection = <защитить_кластер_от_удаления> config { version = "<версия>" zones = ["<зоны_доступности>"] brokers_count = <количество_хостов-брокеров> assign_public_ip = "<разрешить_публичный_доступ_к_кластеру>" schema_registry = "<включить_управление_схемами_данных>" kafka_ui { enabled = <использовать_веб-интерфейс_Kafka_UI> } kafka { resources { disk_size = <размер_хранилища_ГБ> disk_type_id = "<тип_диска>" resource_preset_id = "<класс_хоста>" } kafka_config {} } } } resource "yandex_vpc_network" "<имя_сети>" { name = "<имя_сети>" } resource "yandex_vpc_subnet" "<имя_подсети>" { name = "<имя_подсети>" zone = "<зона_доступности>" network_id = "<идентификатор_сети>" v4_cidr_blocks = ["<диапазон>"] }Где:
-
environment— окружение кластера:PRESTABLEилиPRODUCTION. -
version— версия Apache Kafka®: 3.5, 3.6, 3.7, 3.8 или 3.9. Дополнительно передайте конфигурацию хостов ZooKeeper. -
zonesиbrokers_count— зоны доступности и число хостов-брокеров в каждой зоне. -
deletion_protection— защита кластера от непреднамеренного удаления:trueилиfalse.Примечание
Включенная защита кластера от удаления не помешает удалить пользователя или топик, а также подключиться вручную и удалить данные.
-
assign_public_ip— публичный доступ к кластеру:trueилиfalse. -
schema_registry— управление схемами данных с помощью Managed Schema Registry:trueилиfalse. Значение по умолчанию —false.Важно
Невозможно отключить управление схемами данных с помощью Managed Schema Registry после его подключения.
-
kafka_ui— использование веб-интерфейса Kafka UI для Apache Kafka®:trueилиfalse. Значение по умолчанию —false.
Чтобы использовать ZooKeeper в кластере, добавьте к описанию кластера блок
zookeeper:resource "yandex_mdb_kafka_cluster" "<имя_кластера>" { ... zookeeper { resources { resource_preset_id = "<класс_хоста>" disk_type_id = "<тип_диска>" disk_size = <размер_хранилища_ГБ> } } }Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров), добавьте к описанию кластера блок
maintenance_window:resource "yandex_mdb_kafka_cluster" "<имя_кластера>" { ... maintenance_window { type = <тип_технического_обслуживания> day = <день_недели> hour = <час_дня> } ... }Где:
type— тип технического обслуживания. Принимает значения:ANYTIME— в любое время.WEEKLY— по расписанию.
day— день недели для типаWEEKLY:MON,TUE,WED,THU,FRI,SATилиSUN.hour— час дня по UTC для типаWEEKLY: от1до24.
-
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Создайте кластер Managed Service for Apache Kafka®.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
После этого в указанном каталоге будут созданы все требуемые ресурсы, а в терминале отобразятся FQDN хостов кластера Managed Service for Apache Kafka®. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Подробнее см. в документации провайдера Terraform.
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение всех операций с кластером Managed Service for Apache Kafka® 60 минутами.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts, например:
resource "yandex_mdb_kafka_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом Cluster.create и выполните запрос, например, с помощью cURL
:-
Создайте файл
body.jsonи добавьте в него следующее содержимое:Примечание
В примере приведены не все доступные параметры.
{ "folderId": "<идентификатор_каталога>", "name": "<имя_кластера>", "environment": "<окружение>", "networkId": "<идентификатор_сети>", "securityGroupIds": [ "<идентификатор_группы_безопасности_1>", "<идентификатор_группы_безопасности_2>", ... "<идентификатор_группы_безопасности_N>" ], "configSpec": { "version": "<версия_Apache Kafka®>", "kafka": { "resources": { "resourcePresetId": "<класс_хостов Apache Kafka®>", "diskSize": "<размер_хранилища_в_байтах>", "diskTypeId": "<тип_диска>" } }, "zookeeper": { "resources": { "resourcePresetId": "<класс_хостов ZooKeeper>", "diskSize": "<размер_хранилища_в_байтах>", "diskTypeId": "<тип_диска>" } }, "zoneId": [ <список_зон_доступности> ], "brokersCount": "<количество_брокеров_в_зоне>", "assignPublicIp": <разрешить_публичный_доступ_к_кластеру>, "schemaRegistry": <включить_управление_схемами_данных>, "restApiConfig": { "enabled": <включить_отправку_запросов_к_API_Apache Kafka®> }, "diskSizeAutoscaling": { <параметры_автоматического_увеличения_размера_хранилища> }, "kafkaUiConfig": { "enabled": <использовать_веб-интерфейс_Kafka_UI> } }, "topicSpecs": [ { "name": "<имя_топика>", "partitions": "<количество_партиций>", "replicationFactor": "<фактор_репликации>" }, { <аналогичный_набор_настроек_для_топика_2> }, { ... }, { <аналогичный_набор_настроек_для_топика_N> } ], "userSpecs": [ { "name": "<имя_пользователя>", "password": "<пароль_пользователя>", "permissions": [ { "topicName": "<имя_топика>", "role": "<роль_пользователя>" } ] }, { <аналогичный_набор_настроек_для_пользователя_2> }, { ... }, { <аналогичный_набор_настроек_для_пользователя_N> } ], "maintenanceWindow": { "anytime": {}, "weeklyMaintenanceWindow": { "day": "<день_недели>", "hour": "<час_дня_по_UTC>" } }, "deletionProtection": <защитить_кластер_от_удаления> }Где:
-
name— имя кластера. -
environment— окружение кластера:PRODUCTIONилиPRESTABLE. -
networkId— идентификатор сети, в которой будет размещен кластер. -
securityGroupIds— идентификаторы групп безопасности в виде массива строк. Каждая строка — идентификатор группы безопасности. -
configSpec— конфигурация кластера:-
version— версия Apache Kafka®: 3.5, 3.6, 3.7, 3.8 или 3.9. Дополнительно передайте конфигурацию хостов ZooKeeper. -
kafka— конфигурация Apache Kafka®:resources.resourcePresetId— идентификатор класса хостов. Список доступных классов хостов с их идентификаторами можно запросить с помощью метода ResourcePreset.list.resources.diskSize— размер диска в байтах.resources.diskTypeId— тип диска.
-
zookeeper— конфигурация ZooKeeper:resources.resourcePresetId— идентификатор класса хостов. Список доступных классов хостов с их идентификаторами можно запросить с помощью метода ResourcePreset.list.resources.diskSize— размер диска в байтах.resources.diskTypeId— тип диска.
-
zoneIdиbrokersCount– зоны доступности и число хостов-брокеров в каждой зоне. -
assignPublicIp— доступность хостов-брокеров из интернета:trueилиfalse. -
schemaRegistry– управлять схемами данных с помощью Managed Schema Registry:trueилиfalse. Значение по умолчанию —false. Эту настройку невозможно изменить после создания кластера Managed Service for Apache Kafka®. -
restApiConfig— конфигурация Apache Kafka® REST API. Для доступа к отправке запросов к REST API Apache Kafka® укажитеenabled: true. -
diskSizeAutoscaling– пороги заполненности хранилища (в процентах от общего объема хранилища), при достижении которых его размер будет увеличиваться:-
plannedUsageThreshold– процент заполнения хранилища, при котором хранилище будет увеличено в следующее окно обслуживания.Значение задается в процентах от
0до100. По умолчанию —0(автоматическое расширение отключено).Если вы задали этот параметр, настройте расписание окна технического обслуживания.
-
emergencyUsageThreshold— процент заполнения хранилища, при котором хранилище будет увеличено немедленно.Значение задается в процентах от
0до100. По умолчанию —0(автоматическое расширение отключено). Должно быть не меньше значенияplannedUsageThreshold. -
diskSizeLimit– максимальный размер хранилища (в байтах), который может быть установлен при достижении одного из заданных процентов заполнения.
-
-
kafkaUiConfig— использование веб-интерфейса Kafka UI. Для доступа к веб-интерфейсу Kafka UI укажитеenabled: true.
-
-
topicSpecs— настройки топиков в виде массива элементов. Каждый элемент соответствует отдельному топику и имеет следующую структуру:-
name— имя топика.Примечание
Если нужно создать топик, начинающийся с символа
_, используйте Admin API Apache Kafka®. Создать такой топик с помощью интерфейсов Yandex Cloud нельзя. -
partitions– количество разделов. -
replicationFactor– фактор репликации.
-
-
userSpecs— настройки пользователей в виде массива элементов. Каждый элемент соответствует отдельному пользователю и имеет следующую структуру:-
name— имя пользователя. Оно может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы или подчеркивания. -
password— пароль пользователя. Длина пароля от 8 до 128 символов. -
permissions— список топиков, к которым пользователь должен иметь доступ.Список организован в виде массива элементов. Каждый элемент соответствует отдельному топику и имеет следующую структуру:
topicName– имя или шаблон имени топика:*— чтобы разрешить доступ к любым топикам.- Полное название топика — чтобы разрешить доступ конкретно к нему.
<префикс>*— чтобы выдать доступ к топикам, названия которых начинаются с указанного префикса. Допустим, есть топикиtopic_a1,topic_a2,a3. Если указать значениеtopic*, доступ будет разрешен для топиковtopic_a1иtopic_a2.Для указания всех топиков в кластере используйте маску*.
role– роль пользователя:ACCESS_ROLE_CONSUMER,ACCESS_ROLE_PRODUCERилиACCESS_ROLE_ADMIN. РольACCESS_ROLE_ADMINдоступна только если выбраны все топики (topicName: "*").allowHosts– (опционально) список IP-адресов, с которых пользователю разрешен доступ к топику.
-
-
maintenanceWindow— настройки времени технического обслуживания (в том числе для выключенных кластеров). Выберите один из вариантов:anytime(по умолчанию) — в любое время.weeklyMaintenanceWindow— по расписанию:day— день недели в форматеDDD:MON,TUE,WED,THU,FRI,SATилиSUN.hour— час дня по UTC в форматеHH: от1до24.
-
deletionProtection— защита кластера от непреднамеренного удаления:trueилиfalse. Значение по умолчанию —false.Примечание
Включенная защита кластера от удаления не помешает удалить пользователя или топик, а также подключиться вручную и удалить данные.
Идентификатор каталога можно запросить со списком каталогов в облаке.
-
-
Выполните запрос:
curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.yandexcloud.kz/managed-kafka/v1/clusters' \ --data '@body.json'
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом ClusterService/Create и выполните запрос, например, с помощью gRPCurl
:-
Создайте файл
body.jsonи добавьте в него следующее содержимое:Примечание
В примере приведены не все доступные параметры.
{ "folder_id": "<идентификатор_каталога>", "name": "<имя_кластера>", "environment": "<окружение>", "network_id": "<идентификатор_сети>", "security_group_ids": [ "<идентификатор_группы_безопасности_1>", "<идентификатор_группы_безопасности_2>", ... "<идентификатор_группы_безопасности_N>" ], "config_spec": { "version": "<версия_Apache Kafka®>", "kafka": { "resources": { "resource_preset_id": "<класс_хостов Apache Kafka®>", "disk_size": "<размер_хранилища_в_байтах>", "disk_type_id": "<тип_диска>" } }, "zookeeper": { "resources": { "resource_preset_id": "<класс_хостов ZooKeeper>", "disk_size": "<размер_хранилища_в_байтах>", "disk_type_id": "<тип_диска>" } }, "zone_id": [ <список_зон_доступности> ], "brokers_count": { "value": "<количество_брокеров_в_зоне>" }, "assign_public_ip": <разрешить_публичный_доступ_к_кластеру>, "schema_registry": <включить_управление_схемами_данных>, "rest_api_config": { "enabled": <включить_отправку_запросов_к_API_Apache Kafka®> }, "disk_size_autoscaling": { <параметры_автоматического_увеличения_размера_хранилища> }, "kafka_ui_config": { "enabled": <использовать_веб-интерфейс_Kafka_UI> } }, "topic_specs": [ { "name": "<имя_топика>", "partitions": { "value": "<количество_партиций>" }, "replication_factor": { "value": "<фактор_репликации>" } }, { <аналогичный_набор_настроек_для_топика_2> }, { ... }, { <аналогичный_набор_настроек_для_топика_N> } ], "user_specs": [ { "name": "<имя_пользователя>", "password": "<пароль_пользователя>", "permissions": [ { "topic_name": "<имя_топика>", "role": "<роль_пользователя>" } ] }, { <аналогичный_набор_настроек_для_пользователя_2> }, { ... }, { <аналогичный_набор_настроек_для_пользователя_N> } ], "maintenance_window": { "anytime": {}, "weekly_maintenance_window": { "day": "<день_недели>", "hour": "<час_дня_по_UTC>" } }, "deletion_protection": <защитить_кластер_от_удаления> }Где:
-
name— имя кластера. -
environment— окружение кластера:PRODUCTIONилиPRESTABLE. -
network_id— идентификатор сети, в которой будет размещен кластер. -
security_group_ids— идентификаторы групп безопасности в виде массива строк. Каждая строка — идентификатор группы безопасности. -
config_spec— конфигурация кластера:-
version— версия Apache Kafka®: 3.5, 3.6, 3.7, 3.8 или 3.9. Дополнительно передайте конфигурацию хостов ZooKeeper. -
kafka— конфигурация Apache Kafka®:resources.resource_preset_id— идентификатор класса хостов. Список доступных классов хостов с их идентификаторами можно запросить с помощью вызова ResourcePreset.list.resources.disk_size— размер диска в байтах.resources.disk_type_id— тип диска.
-
zookeeper— конфигурация ZooKeeper:resources.resource_preset_id— идентификатор класса хостов. Список доступных классов хостов с их идентификаторами можно запросить с помощью вызова ResourcePreset.list.resources.disk_size— размер диска в байтах.resources.disk_type_id— тип диска.
-
zone_idиbrokers_count– зоны доступности и число хостов-брокеров в каждой зоне (число передается в виде объекта с полемvalue). -
assign_public_ip— доступность хостов-брокеров из интернета:trueилиfalse. -
schema_registry– управлять схемами данных с помощью Managed Schema Registry:trueилиfalse. Значение по умолчанию —false. Эту настройку невозможно изменить после создания кластера Managed Service for Apache Kafka®. -
rest_api_config— конфигурация Apache Kafka® REST API. Для доступа к отправке запросов к REST API Apache Kafka® укажитеenabled: true. -
disk_size_autoscaling– чтобы в кластере не заканчивалось место на диске, укажите пороги заполненности хранилища (в процентах от общего объема хранилища), при достижении которых его размер будет увеличиваться:-
planned_usage_threshold– процент заполнения хранилища, при котором хранилище будет увеличено в следующее окно обслуживания.Значение задается в процентах от
0до100. По умолчанию —0(автоматическое расширение отключено).Если вы задали этот параметр, настройте расписание окна технического обслуживания.
-
emergency_usage_threshold— процент заполнения хранилища, при котором хранилище будет увеличено немедленно.Значение задается в процентах от
0до100. По умолчанию —0(автоматическое расширение отключено). Должно быть не меньше значенияplanned_usage_threshold. -
disk_size_limit– максимальный размер хранилища (в байтах), который может быть установлен при достижении одного из заданных процентов заполнения.
-
-
kafka_ui_config— использование веб-интерфейса Kafka UI. Для доступа к веб-интерфейсу Kafka UI укажитеenabled: true.
-
-
topic_specs— настройки топиков в виде массива элементов. Каждый элемент соответствует отдельному топику и имеет следующую структуру:-
name— имя топика.Примечание
Если нужно создать топик, начинающийся с символа
_, используйте Admin API Apache Kafka®. Создать такой топик с помощью интерфейсов Yandex Cloud нельзя. -
partitions– количество разделов. Передается в виде объекта с полемvalue. -
replication_factor– фактор репликации. Передается в виде объекта с полемvalue.
-
-
user_specs— настройки пользователей в виде массива элементов. Каждый элемент соответствует отдельному пользователю и имеет следующую структуру:-
name— имя пользователя. Оно может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы или подчеркивания. -
password— пароль пользователя. Длина пароля от 8 до 128 символов. -
permissions— список топиков, к которым пользователь должен иметь доступ.Список организован в виде массива элементов. Каждый элемент соответствует отдельному топику и имеет следующую структуру:
topic_name– имя или шаблон имени топика:*— чтобы разрешить доступ к любым топикам.- Полное название топика — чтобы разрешить доступ конкретно к нему.
<префикс>*— чтобы выдать доступ к топикам, названия которых начинаются с указанного префикса. Допустим, есть топикиtopic_a1,topic_a2,a3. Если указать значениеtopic*, доступ будет разрешен для топиковtopic_a1иtopic_a2.Для указания всех топиков в кластере используйте маску*.
role– роль пользователя:ACCESS_ROLE_CONSUMER,ACCESS_ROLE_PRODUCERилиACCESS_ROLE_ADMIN. РольACCESS_ROLE_ADMINдоступна только если выбраны все топики (topicName: "*").allow_hosts– (опционально) список IP-адресов, с которых пользователю разрешен доступ к топику, в виде массива элементов.
-
-
maintenance_window— настройки времени технического обслуживания (в том числе для выключенных кластеров). Выберите один из вариантов:anytime(по умолчанию) — в любое время.weekly_maintenance_window— по расписанию:day— день недели в форматеDDD:MON,TUE,WED,THU,FRI,SATилиSUN.hour— час дня по UTC в форматеHH: от1до24.
-
deletion_protection— защита кластера от непреднамеренного удаления:trueилиfalse. Значение по умолчанию —false.Примечание
Включенная защита кластера от удаления не помешает удалить пользователя или топик, а также подключиться вручную и удалить данные.
Идентификатор каталога можно запросить со списком каталогов в облаке.
-
-
Выполните запрос:
curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.yandexcloud.kz/managed-kafka/v1/clusters' \ --data '@body.json'
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Создать кластер с KRaft
Важно
При создании кластера с KRaft не указывайте настройки ZooKeeper.
Чтобы создать кластер Managed Service for Apache Kafka®:
-
В консоли управления
перейдите в нужный каталог. -
В списке сервисов выберите Managed Service for Kafka.
-
Нажмите кнопку Создать кластер.
-
В блоке Базовые параметры:
-
Введите имя кластера Managed Service for Apache Kafka® и его описание. Имя кластера Managed Service for Apache Kafka® должно быть уникальным в рамках каталога.
-
Выберите окружение, в котором нужно создать кластер Managed Service for Apache Kafka® (после создания кластера изменить окружение невозможно):
PRODUCTION— для стабильных версий приложений.PRESTABLE— для тестирования. Prestable-окружение аналогично Production-окружению, и на него также распространяется SLA, но при этом на нем раньше появляются новые функциональные возможности, улучшения и исправления ошибок. В Prestable-окружении вы можете протестировать совместимость новых версий с вашим приложением.
-
Выберите версию Apache Kafka® 3.6 и выше.
-
-
В блоке Класс хоста выберите платформу, тип и класс хостов.
Класс хостов определяет технические характеристики виртуальных машин, на которых будут развернуты хосты-брокеры Apache Kafka®. Все доступные варианты перечислены в разделе Классы хостов.
При изменении класса хостов для кластера Managed Service for Apache Kafka® меняются характеристики всех уже созданных экземпляров.
-
В блоке Хранилище:
-
Выберите тип диска.
Важно
Тип диска нельзя изменить после создания кластера.
От выбранного типа зависит, с каким шагом можно будет изменить размер диска:
- Сетевые HDD- и SSD-диски — с шагом 1 ГБ.
- Локальные SSD-диски:
- для платформы Intel Cascade Lake — с шагом 100 ГБ;
- для платформы Intel Ice Lake — с шагом 368 ГБ.
- Нереплицируемые SSD-диски — с шагом 93 ГБ.
Тип диска для кластера Managed Service for Apache Kafka® нельзя изменить после создания.
-
Выберите объем хранилища, который будет использоваться для данных.
-
-
В блоке Автоматическое увеличение размера хранилища задайте пороги заполненности хранилища, при достижении которых его размер будет увеличиваться:
- В поле Увеличивать размер выберите один или оба порога:
- В окно обслуживания при заполненности более — порог для планового увеличения. Когда он достигнут, объем хранилища увеличивается во время ближайшего окна обслуживания.
- Незамедлительно при заполненности более — порог для незамедлительного увеличения. Когда он достигнут, объем хранилища увеличивается немедленно.
- Задайте пороговое значение (в процентах от общего объема хранилища). Если выбраны оба порога, значение для незамедлительного увеличения должно быть выше, чем для планового.
- Задайте Максимальный размер хранилища.
- В поле Увеличивать размер выберите один или оба порога:
-
В блоке Сетевые настройки:
-
Выберите одну или несколько зон доступности, в которых нужно разместить хосты-брокеры Apache Kafka®.
Важно
Если создать кластер Managed Service for Apache Kafka® с одной зоной доступности, в дальнейшем увеличить количество зон и хостов-брокеров будет невозможно.
-
Выберите сеть.
-
Выберите подсети в каждой зоне доступности для этой сети. Чтобы создать новую подсеть, нажмите на кнопку Создать рядом с нужной зоной доступности.
Примечание
Для кластера Apache Kafka®, в котором несколько хостов-брокеров, укажите подсети в каждой зоне доступности, даже если вы планируете разместить хосты-брокеры только в некоторых из них. Эти подсети понадобятся для размещения трех хостов KRaft — по одному в каждой зоне доступности. Подробнее см. в разделе Взаимосвязь ресурсов сервиса.
-
Выберите группы безопасности для сетевого трафика кластера Managed Service for Apache Kafka®.
-
Для доступа к хостам-брокерам из интернета выберите опцию Публичный доступ. В этом случае подключаться к ним можно только с использованием SSL-соединения. Подробнее см. в разделе Подключение к топикам в кластере.
-
-
В блоке Хосты:
-
Укажите количество хостов-брокеров Apache Kafka® для размещения в каждой выбранной зоне доступности.
При выборе количества хостов учтите следующие особенности:
- Если в качестве сервиса координации выбран KRaft (комбинированный режим) — задать количество хостов-брокеров вручную нельзя.
- Если в качестве сервиса координации выбран KRaft (на отдельных хостах) — количество брокеров задается вручную. При создании кластера с несколькими хостами в него будут добавлены три выделенных хоста KRaft.
- Репликация возможна при наличии как минимум двух хостов в кластере Managed Service for Apache Kafka®.
- Для высокой доступности кластера Managed Service for Apache Kafka® должны выполняться определенные условия.
-
В поле Сервис координации выберите один из вариантов:
-
KRaft (на отдельных хостах) — брокер и контроллер метаданных KRaft размещаются на отдельных хостах.
-
KRaft (комбинированный режим) — на одном хосте Apache Kafka® одновременно размещаются брокер и контроллер метаданных KRaft.
Можно создать кластер только в одной или в трех зонах доступности:
- Одна зона доступности — три хоста-брокера.
- Три зоны доступности — один хост-брокер в каждой зоне доступности.
Задать количество хостов-брокеров вручную нельзя.
-
-
-
Если вы указали более одного хоста-брокера, то в блоке Класс хоста KRaft укажите характеристики хостов KRaft для размещения в каждой выбранной зоне доступности.
-
При необходимости задайте дополнительные настройки кластера Managed Service for Apache Kafka®:
-
Окно обслуживания — настройки времени технического обслуживания:
- Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт произвольное (по умолчанию).
- Чтобы указать предпочтительное время начала обслуживания, выберите пункт по расписанию и укажите нужные день недели и час дня по UTC. Например, можно выбрать время, когда кластер наименее загружен.
Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать в себя: обновление СУБД, применение патчей и так далее.
-
Защита от удаления — управляет защитой кластера от непреднамеренного удаления.
Включенная защита кластера от удаления не помешает удалить пользователя или топик, а также подключиться вручную и удалить данные.
-
Чтобы управлять схемами данных с помощью Managed Schema Registry, включите настройку Реестр схем данных.
Важно
Невозможно отключить управление схемами данных с помощью Managed Schema Registry после его подключения.
-
Чтобы разрешить отправку запросов к API Apache Kafka®, включите настройку Kafka Rest API.
В качестве реализации используется приложение с открытым исходным кодом Karapace
. API Karapace совместимо с API Confluent REST Proxy за исключением небольших расхождений.Важно
Настройку Kafka Rest API невозможно отключить после ее включения.
-
Чтобы использовать веб-интерфейс Apache Kafka®, включите настройку Kafka UI.
-
-
При необходимости задайте настройки Apache Kafka®.
-
Нажмите кнопку Создать.
-
Дождитесь, когда кластер Managed Service for Apache Kafka® будет готов к работе: его статус на панели Managed Service for Apache Kafka® сменится на
Running, а состояние — наAlive. Это может занять некоторое время.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы создать кластер Managed Service for Apache Kafka®:
-
Посмотрите описание команды CLI для создания кластера Managed Service for Apache Kafka®:
yc managed-kafka cluster create --help -
Укажите параметры кластера Managed Service for Apache Kafka® в команде создания (в примере приведены не все параметры):
yc managed-kafka cluster create \ --name <имя_кластера> \ --environment <окружение> \ --version <версия> \ --schema-registry \ --network-name <имя_сети> \ --subnet-ids <идентификаторы_подсетей> \ --resource-preset <класс_хоста> \ --disk-type <network-hdd|network-ssd|network-ssd-nonreplicated|local-ssd> \ --disk-size <размер_хранилища_ГБ> \ --assign-public-ip <разрешить_публичный_доступ_к_кластеру> \ --security-group-ids <список_идентификаторов_групп_безопасности> \ --deletion-protection \ --kafka-ui-enabled <true_или_false>Где:
-
--environment— окружение кластера:prestableилиproduction. -
--version— версия Apache Kafka®. Указывайте версию 3.6 и выше. -
--schema-registry— управление схемами данных с помощью Managed Schema Registry.Важно
Невозможно отключить управление схемами данных с помощью Managed Schema Registry после его подключения.
-
--zone-idsи--brokers-count— зоны доступности и число хостов-брокеров в каждой зоне.Если вы создаете кластер с KRaft (комбинированный режим), укажите одну из доступных конфигураций:
--zone-ids=kz1-a,kz1-b,kz1-d --brokers-count=1— три зоны доступности, один хост-брокер в каждой зоне;--zone-ids=<одна_зона_доступности> --brokers-count=3— одна зона доступности, три хоста-брокера.
-
--resource-preset— класс хостов. -
--disk-type— тип диска.Важно
Тип диска нельзя изменить после создания кластера.
-
--deletion-protection— защита кластера от непреднамеренного удаления:trueилиfalse.Примечание
Включенная защита кластера от удаления не помешает удалить пользователя или топик, а также подключиться вручную и удалить данные.
-
--kafka-ui-enabled— использование веб-интерфейса Kafka UI для Apache Kafka®:trueилиfalse.
Совет
При необходимости здесь же можно задать настройки Apache Kafka®.
-
-
Чтобы использовать KRaft (на отдельных хостах) передайте конфигурацию хостов KRaft.
yc managed-kafka cluster create \ ... --controller-resource-preset <класс_хоста> \ --controller-disk-size <размер_хранилища_ГБ> \ --controller-disk-type <network-hdd|network-ssd|network-ssd-nonreplicated|local-ssd> \ ...Где:
--controller-resource-preset— класс хостов KRaft.--controller-disk-size— размер хранилища.--controller-disk-type— тип диска KRaft.
-
Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров Managed Service for Apache Kafka®), передайте нужное значение в параметре
--maintenance-windowпри создании кластера:yc managed-kafka cluster create \ ... --maintenance-window type=<тип_технического_обслуживания>,` `day=<день_недели>,` `hour=<час_дня> \ ...Где
type— тип технического обслуживания:anytime(по умолчанию) — в любое время.weekly— по расписанию. Для этого значения дополнительно укажите:day— день недели:MON,TUE,WED,THU,FRI,SATилиSUN.hour— час дня по UTC: от1до24.
-
Чтобы в кластере не заканчивалось место на диске, создайте кластер с автоматическим увеличением размера хранилища:
yc managed-kafka cluster create \ ... --disk-size-autoscaling disk-size-limit=<максимальный_размер_хранилища_в_байтах>,` `planned-usage-threshold=<процент_для_планового_увеличения>,` `emergency-usage-threshold=<процент_для_незамедлительного_увеличения> \ ...Где:
-
planned-usage-threshold— процент заполнения хранилища, при котором хранилище будет увеличено в следующее окно технического обслуживания.Значение задается в процентах от
0до100. По умолчанию —0(автоматическое расширение отключено).Если вы задали этот параметр, настройте расписание технического обслуживания.
-
emergency-usage-threshold— процент заполнения хранилища, при котором хранилище будет увеличено немедленно.Значение задается в процентах от
0до100. По умолчанию —0(автоматическое расширение отключено). Должно быть не меньше значенияplanned-usage-threshold. -
disk-size-limit— максимальный размер хранилища в байтах, который может быть установлен при достижении одного из заданных процентов заполнения.Если указать значение
0, автоматическое увеличение размера хранилища будет отключено.
Важно
- Размер хранилища нельзя уменьшить.
- Во время изменения размера хранилища хосты кластера будут недоступны.
-
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы создать кластер Managed Service for Apache Kafka®:
-
Опишите в конфигурационном файле создаваемые ресурсы:
-
Кластер Managed Service for Apache Kafka® — описание кластера и его хостов. При необходимости здесь же можно задать настройки Apache Kafka®.
-
Сеть — описание облачной сети, в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
-
Подсети — описание подсетей, к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.
Пример структуры конфигурационного файла:
resource "yandex_mdb_kafka_cluster" "<имя_кластера>" { environment = "<окружение>" name = "<имя_кластера>" network_id = "<идентификатор_сети>" subnet_ids = ["<список_идентификаторов_подсетей>"] security_group_ids = ["<список_идентификаторов_групп_безопасности_кластера>"] deletion_protection = <защитить_кластер_от_удаления> config { version = "<версия>" zones = ["<зоны_доступности>"] brokers_count = <количество_хостов-брокеров> assign_public_ip = "<разрешить_публичный_доступ_к_кластеру>" schema_registry = "<включить_управление_схемами_данных>" kafka_ui { enabled = <использовать_веб-интерфейс_Kafka_UI> } kafka { resources { disk_size = <размер_хранилища_ГБ> disk_type_id = "<тип_диска>" resource_preset_id = "<класс_хоста>" } kafka_config {} } } } resource "yandex_vpc_network" "<имя_сети>" { name = "<имя_сети>" } resource "yandex_vpc_subnet" "<имя_подсети>" { name = "<имя_подсети>" zone = "<зона_доступности>" network_id = "<идентификатор_сети>" v4_cidr_blocks = ["<диапазон>"] }Где:
-
environment— окружение кластера:PRESTABLEилиPRODUCTION. -
version— версия Apache Kafka®. Указывайте версию 3.6 и выше. -
zonesиbrokers_count— зоны доступности и число хостов-брокеров в каждой зоне.Если вы создаете кластер с KRaft (комбинированный режим), укажите одну из доступных конфигураций:
zones = ["kz1-a","kz1-b","kz1-d"] brokers_count = 1— три зоны доступности, один хост-брокер в каждой зоне;zones = ["<одна_зона_доступности>"] brokers_count = 3— одна зона доступности, три хоста-брокера.
-
deletion_protection— защита кластера от непреднамеренного удаления:trueилиfalse.Примечание
Включенная защита кластера от удаления не помешает удалить пользователя или топик, а также подключиться вручную и удалить данные.
-
assign_public_ip— публичный доступ к кластеру:trueилиfalse. -
schema_registry— управление схемами данных с помощью Managed Schema Registry:trueилиfalse. Значение по умолчанию —false.Важно
Невозможно отключить управление схемами данных с помощью Managed Schema Registry после его подключения.
-
kafka_ui— использование веб-интерфейса Kafka UI для Apache Kafka®:trueилиfalse. Значение по умолчанию —false.
Чтобы использовать KRaft (на отдельных хостах), добавьте к описанию кластера блок
kraft:resource "yandex_mdb_kafka_cluster" "<имя_кластера>" { ... kraft { resources { resource_preset_id = "<класс_хоста>" disk_type_id = "<тип_диска>" disk_size = <размер_хранилища_ГБ> } } }Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров), добавьте к описанию кластера блок
maintenance_window:resource "yandex_mdb_kafka_cluster" "<имя_кластера>" { ... maintenance_window { type = <тип_технического_обслуживания> day = <день_недели> hour = <час_дня> } ... }Где:
type— тип технического обслуживания. Принимает значения:ANYTIME— в любое время.WEEKLY— по расписанию.
day— день недели для типаWEEKLY:MON,TUE,WED,THU,FRI,SATилиSUN.hour— час дня по UTC для типаWEEKLY: от1до24.
-
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Создайте кластер Managed Service for Apache Kafka®.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
После этого в указанном каталоге будут созданы все требуемые ресурсы, а в терминале отобразятся FQDN хостов кластера Managed Service for Apache Kafka®. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Подробнее см. в документации провайдера Terraform.
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение всех операций с кластером Managed Service for Apache Kafka® 60 минутами.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts, например:
resource "yandex_mdb_kafka_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом Cluster.create и выполните запрос, например, с помощью cURL
:-
Создайте файл
body.jsonи добавьте в него следующее содержимое:Примечание
В примере приведены не все доступные параметры.
{ "folderId": "<идентификатор_каталога>", "name": "<имя_кластера>", "environment": "<окружение>", "networkId": "<идентификатор_сети>", "securityGroupIds": [ "<идентификатор_группы_безопасности_1>", "<идентификатор_группы_безопасности_2>", ... "<идентификатор_группы_безопасности_N>" ], "configSpec": { "version": "<версия_Apache Kafka®>", "kafka": { "resources": { "resourcePresetId": "<класс_хостов Apache Kafka®>", "diskSize": "<размер_хранилища_в_байтах>", "diskTypeId": "<тип_диска>" } }, "kraft": { "resources": { "resourcePresetId": "<класс_хостов KRaft>", "diskSize": "<размер_хранилища_в_байтах>", "diskTypeId": "<тип_диска>" } }, "zoneId": [ <список_зон_доступности> ], "brokersCount": "<количество_брокеров_в_зоне>", "assignPublicIp": <разрешить_публичный_доступ_к_кластеру>, "schemaRegistry": <включить_управление_схемами_данных>, "restApiConfig": { "enabled": <включить_отправку_запросов_к_API_Apache Kafka®> }, "diskSizeAutoscaling": { <параметры_автоматического_увеличения_размера_хранилища> }, "kafkaUiConfig": { "enabled": <использовать_веб-интерфейс_Kafka_UI> } }, "topicSpecs": [ { "name": "<имя_топика>", "partitions": "<количество_партиций>", "replicationFactor": "<фактор_репликации>" }, { <аналогичный_набор_настроек_для_топика_2> }, { ... }, { <аналогичный_набор_настроек_для_топика_N> } ], "userSpecs": [ { "name": "<имя_пользователя>", "password": "<пароль_пользователя>", "permissions": [ { "topicName": "<имя_топика>", "role": "<роль_пользователя>" } ] }, { <аналогичный_набор_настроек_для_пользователя_2> }, { ... }, { <аналогичный_набор_настроек_для_пользователя_N> } ], "maintenanceWindow": { "anytime": {}, "weeklyMaintenanceWindow": { "day": "<день_недели>", "hour": "<час_дня_по_UTC>" } }, "deletionProtection": <защитить_кластер_от_удаления> }Где:
-
name— имя кластера. -
environment— окружение кластера:PRODUCTIONилиPRESTABLE. -
networkId— идентификатор сети, в которой будет размещен кластер. -
securityGroupIds— идентификаторы групп безопасности в виде массива строк. Каждая строка — идентификатор группы безопасности. -
configSpec— конфигурация кластера:-
version— версия Apache Kafka®. Указывайте версию 3.6 и выше. -
kafka— конфигурация Apache Kafka®:resources.resourcePresetId— идентификатор класса хостов. Список доступных классов хостов с их идентификаторами можно запросить с помощью метода ResourcePreset.list.resources.diskSize— размер диска в байтах.resources.diskTypeId— тип диска.
-
kraft— конфигурация KRaft:resources.resourcePresetId— идентификатор класса хостов. Список доступных классов хостов с их идентификаторами можно запросить с помощью метода ResourcePreset.list.resources.diskSize— размер диска в байтах.resources.diskTypeId— тип диска.
Важно
Если вы создаете кластер с KRaft (комбинированный режим), не передавайте конфигурацию хостов KRaft.
-
zoneIdиbrokersCount– зоны доступности и число хостов-брокеров в каждой зоне.Если вы создаете кластер с KRaft (комбинированный режим), укажите одну из доступных конфигураций:
"zoneId": ["kz1-a","kz1-b","kz1-d"], "brokersCount": "1"— три зоны доступности, один хост-брокер в каждой зоне;"zoneId": ["<одна_зона_доступности>"], "brokersCount": "3"— одна зона доступности, три хоста-брокера.
-
assignPublicIp— доступность хостов-брокеров из интернета:trueилиfalse. -
schemaRegistry– управлять схемами данных с помощью Managed Schema Registry:trueилиfalse. Значение по умолчанию —false. Эту настройку невозможно изменить после создания кластера Managed Service for Apache Kafka®. -
restApiConfig– конфигурация Apache Kafka® REST API. Для доступа к отправке запросов к REST API Apache Kafka® укажитеenabled: true. -
diskSizeAutoscaling– пороги заполненности хранилища (в процентах от общего объема хранилища), при достижении которых его размер будет увеличиваться:-
plannedUsageThreshold– процент заполнения хранилища, при котором хранилище будет увеличено в следующее окно обслуживания.Значение задается в процентах от
0до100. По умолчанию —0(автоматическое расширение отключено).Если вы задали этот параметр, настройте расписание окна технического обслуживания.
-
emergencyUsageThreshold— процент заполнения хранилища, при котором хранилище будет увеличено немедленно.Значение задается в процентах от
0до100. По умолчанию —0(автоматическое расширение отключено). Должно быть не меньше значенияplannedUsageThreshold. -
diskSizeLimit– максимальный размер хранилища (в байтах), который может быть установлен при достижении одного из заданных процентов заполнения.
-
-
kafkaUiConfig— использование веб-интерфейса Kafka UI. Для доступа к веб-интерфейсу Kafka UI укажитеenabled: true.
-
-
topicSpecs— настройки топиков в виде массива элементов. Каждый элемент соответствует отдельному топику и имеет следующую структуру:-
name— имя топика.Примечание
Если нужно создать топик, начинающийся с символа
_, используйте Admin API Apache Kafka®. Создать такой топик с помощью интерфейсов Yandex Cloud нельзя. -
partitions– количество разделов. -
replicationFactor– фактор репликации.
-
-
userSpecs— настройки пользователей в виде массива элементов. Каждый элемент соответствует отдельному пользователю и имеет следующую структуру:-
name— имя пользователя. Оно может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы или подчеркивания. -
password— пароль пользователя. Длина пароля от 8 до 128 символов. -
permissions— список топиков, к которым пользователь должен иметь доступ.Список организован в виде массива элементов. Каждый элемент соответствует отдельному топику и имеет следующую структуру:
topicName– имя или шаблон имени топика:*— чтобы разрешить доступ к любым топикам.- Полное название топика — чтобы разрешить доступ конкретно к нему.
<префикс>*— чтобы выдать доступ к топикам, названия которых начинаются с указанного префикса. Допустим, есть топикиtopic_a1,topic_a2,a3. Если указать значениеtopic*, доступ будет разрешен для топиковtopic_a1иtopic_a2.Для указания всех топиков в кластере используйте маску*.
role– роль пользователя:ACCESS_ROLE_CONSUMER,ACCESS_ROLE_PRODUCERилиACCESS_ROLE_ADMIN. РольACCESS_ROLE_ADMINдоступна только если выбраны все топики (topicName: "*").allowHosts– (опционально) список IP-адресов, с которых пользователю разрешен доступ к топику.
-
-
maintenanceWindow— настройки времени технического обслуживания (в т. ч. для выключенных кластеров). Выберите один из вариантов:anytime— (по умолчанию) — в любое время.weeklyMaintenanceWindow— по расписанию:day— день недели в форматеDDD:MON,TUE,WED,THU,FRI,SATилиSUN.hour— час дня по UTC в форматеHH: от1до24.
-
deletionProtection— защита кластера от непреднамеренного удаления:trueилиfalse. Значение по умолчанию —false.Примечание
Включенная защита кластера от удаления не помешает удалить пользователя или топик, а также подключиться вручную и удалить данные.
Идентификатор каталога можно запросить со списком каталогов в облаке.
-
-
Выполните запрос:
curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.yandexcloud.kz/managed-kafka/v1/clusters' \ --data '@body.json'
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом ClusterService/Сreate и выполните запрос, например, с помощью gRPCurl
:-
Создайте файл
body.jsonи добавьте в него следующее содержимое:Примечание
В примере приведены не все доступные параметры.
{ "folder_id": "<идентификатор_каталога>", "name": "<имя_кластера>", "environment": "<окружение>", "network_id": "<идентификатор_сети>", "security_group_ids": [ "<идентификатор_группы_безопасности_1>", "<идентификатор_группы_безопасности_2>", ... "<идентификатор_группы_безопасности_N>" ], "config_spec": { "version": "<версия_Apache Kafka®>", "kafka": { "resources": { "resource_preset_id": "<класс_хостов Apache Kafka®>", "disk_size": "<размер_хранилища_в_байтах>", "disk_type_id": "<тип_диска>" } }, "kraft": { "resources": { "resource_preset_id": "<класс_хостов KRaft>", "disk_size": "<размер_хранилища_в_байтах>", "disk_type_id": "<тип_диска>" } }, "zone_id": [ <список_зон_доступности> ], "brokers_count": { "value": "<количество_брокеров_в_зоне>" }, "assign_public_ip": <разрешить_публичный_доступ_к_кластеру>, "schema_registry": <включить_управление_схемами_данных>, "rest_api_config": { "enabled": <включить_отправку_запросов_к_API_Apache Kafka®> }, "disk_size_autoscaling": { <параметры_автоматического_увеличения_размера_хранилища> }, "kafka_ui_config": { "enabled": <использовать_веб-интерфейс_Kafka_UI> } }, "topic_specs": [ { "name": "<имя_топика>", "partitions": { "value": "<количество_партиций>" }, "replication_factor": { "value": "<фактор_репликации>" } }, { <аналогичный_набор_настроек_для_топика_2> }, { ... }, { <аналогичный_набор_настроек_для_топика_N> } ], "user_specs": [ { "name": "<имя_пользователя>", "password": "<пароль_пользователя>", "permissions": [ { "topic_name": "<имя_топика>", "role": "<роль_пользователя>" } ] }, { <аналогичный_набор_настроек_для_пользователя_2> }, { ... }, { <аналогичный_набор_настроек_для_пользователя_N> } ], "maintenance_window": { "anytime": {}, "weekly_maintenance_window": { "day": "<день_недели>", "hour": "<час_дня_по_UTC>" } }, "deletion_protection": <защитить_кластер_от_удаления> }Где:
-
name— имя кластера. -
environment— окружение кластера:PRODUCTIONилиPRESTABLE. -
network_id— идентификатор сети, в которой будет размещен кластер. -
security_group_ids— идентификаторы групп безопасности в виде массива строк. Каждая строка — идентификатор группы безопасности. -
config_spec— конфигурация кластера:-
version— версия Apache Kafka®. Указывайте версию 3.6 и выше. -
kafka— конфигурация Apache Kafka®:resources.resource_preset_id— идентификатор класса хостов. Список доступных классов хостов с их идентификаторами можно запросить с помощью вызова ResourcePreset.list.resources.disk_size— размер диска в байтах.resources.disk_type_id— тип диска.
-
kraft— конфигурация KRaft:resources.resource_preset_id— идентификатор класса хостов. Список доступных классов хостов с их идентификаторами можно запросить с помощью вызова ResourcePreset.list.resources.disk_size— размер диска в байтах.resources.disk_type_id— тип диска.
Важно
Если вы создаете кластер с KRaft (комбинированный режим), не передавайте конфигурацию хостов KRaft.
-
zone_idиbrokers_count– зоны доступности и число хостов-брокеров в каждой зоне (число передается в виде объекта с полемvalue).Если вы создаете кластер с KRaft (комбинированный режим), укажите одну из доступных конфигураций:
"zone_id": ["kz1-a","kz1-b","kz1-d"], "brokers_count": {"value":"1"}— три зоны доступности, один хост-брокер в каждой зоне;"zone_id": ["<одна_зона_доступности>"], "brokers_count": {"value":"3"}— одна зона доступности, три хоста-брокера.
-
assign_public_ip— доступность хостов-брокеров из интернета:trueилиfalse. -
schema_registry– управлять схемами данных с помощью Managed Schema Registry:trueилиfalse. Значение по умолчанию —false. Эту настройку невозможно изменить после создания кластера Managed Service for Apache Kafka®. -
rest_api_config– конфигурация Apache Kafka® REST API. Для доступа к отправке запросов к REST API Apache Kafka® укажитеenabled: true. -
disk_size_autoscaling– чтобы в кластере не заканчивалось место на диске, укажите пороги заполненности хранилища (в процентах от общего объема хранилища), при достижении которых его размер будет увеличиваться:-
planned_usage_threshold– процент заполнения хранилища, при котором хранилище будет увеличено в следующее окно обслуживания.Значение задается в процентах от
0до100. По умолчанию —0(автоматическое расширение отключено).Если вы задали этот параметр, настройте расписание окна технического обслуживания.
-
emergency_usage_threshold— процент заполнения хранилища, при котором хранилище будет увеличено немедленно.Значение задается в процентах от
0до100. По умолчанию —0(автоматическое расширение отключено). Должно быть не меньше значенияplanned_usage_threshold. -
disk_size_limit– максимальный размер хранилища (в байтах), который может быть установлен при достижении одного из заданных процентов заполнения.
-
-
kafka_ui_config— использование веб-интерфейса Kafka UI. Для доступа к веб-интерфейсу Kafka UI укажитеenabled: true.
-
-
topic_specs— настройки топиков в виде массива элементов. Каждый элемент соответствует отдельному топику и имеет следующую структуру:-
name— имя топика.Примечание
Если нужно создать топик, начинающийся с символа
_, используйте Admin API Apache Kafka®. Создать такой топик с помощью интерфейсов Yandex Cloud нельзя. -
partitions– количество разделов. Передается в виде объекта с полемvalue. -
replication_factor– фактор репликации. Передается в виде объекта с полемvalue.
-
-
user_specs— настройки пользователей в виде массива элементов. Каждый элемент соответствует отдельному пользователю и имеет следующую структуру:-
name— имя пользователя. Оно может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы или подчеркивания. -
password— пароль пользователя. Длина пароля от 8 до 128 символов. -
permissions— список топиков, к которым пользователь должен иметь доступ.Список организован в виде массива элементов. Каждый элемент соответствует отдельному топику и имеет следующую структуру:
topic_name– имя или шаблон имени топика:*— чтобы разрешить доступ к любым топикам.- Полное название топика — чтобы разрешить доступ конкретно к нему.
<префикс>*— чтобы выдать доступ к топикам, названия которых начинаются с указанного префикса. Допустим, есть топикиtopic_a1,topic_a2,a3. Если указать значениеtopic*, доступ будет разрешен для топиковtopic_a1иtopic_a2.Для указания всех топиков в кластере используйте маску*.
role– роль пользователя:ACCESS_ROLE_CONSUMER,ACCESS_ROLE_PRODUCERилиACCESS_ROLE_ADMIN. РольACCESS_ROLE_ADMINдоступна только если выбраны все топики (topicName: "*").allow_hosts– (опционально) список IP-адресов, с которых пользователю разрешен доступ к топику, в виде массива элементов.
-
-
maintenance_window— настройки времени технического обслуживания (в т. ч. для выключенных кластеров). Выберите один из вариантов:anytime— (по умолчанию) — в любое время.weekly_maintenance_window— по расписанию:day— день недели в форматеDDD:MON,TUE,WED,THU,FRI,SATилиSUN.hour— час дня по UTC в форматеHH: от1до24.
-
deletion_protection— защита кластера от непреднамеренного удаления:trueилиfalse. Значение по умолчанию —false.Примечание
Включенная защита кластера от удаления не помешает удалить пользователя или топик, а также подключиться вручную и удалить данные.
Идентификатор каталога можно запросить со списком каталогов в облаке.
-
-
Выполните запрос:
curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.yandexcloud.kz/managed-kafka/v1/clusters' \ --data '@body.json'
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Создать копию кластера
Вы можете создать кластер Apache Kafka®, который будет обладать настройками созданного ранее кластера. Для этого конфигурация исходного кластера Apache Kafka® импортируется в Terraform. В результате вы можете либо создать идентичную копию, либо взять за основу импортированную конфигурацию и внести в нее изменения. Использовать импорт удобно, если исходный кластер Apache Kafka® обладает множеством настроек и нужно создать похожий на него кластер.
Чтобы создать копию кластера Apache Kafka®:
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
В той же рабочей директории разместите файл с расширением
.tfи содержимым:resource "yandex_mdb_kafka_cluster" "old" { } -
Запишите идентификатор первоначального кластера Apache Kafka® в переменную окружения:
export KAFKA_CLUSTER_ID=<идентификатор_кластера>Идентификатор можно запросить вместе со списком кластеров в каталоге.
-
Импортируйте настройки первоначального кластера Apache Kafka® в конфигурацию Terraform:
terraform import yandex_mdb_kafka_cluster.old ${KAFKA_CLUSTER_ID} -
Получите импортированную конфигурацию:
terraform show -
Скопируйте ее из терминала и вставьте в файл с расширением
.tf. -
Расположите файл в новой директории
imported-cluster. -
Измените скопированную конфигурацию так, чтобы из нее можно было создать новый кластер:
- Укажите новое имя кластера в строке
resourceи параметреname. - Удалите параметры
created_at,health,host,idиstatus. - Добавьте параметр
subnet_idsи укажите в нем список идентификаторов подсетей для каждой зоны доступности. - Если в блоке
maintenance_windowуказано значение параметраtype = "ANYTIME", удалите параметрhour. - (Опционально) Внесите дополнительные изменения, если вам нужна не идентичная, а кастомизированная копия.
- Укажите новое имя кластера в строке
-
В директории
imported-clusterполучите данные для аутентификации. -
В этой же директории настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в директорию
imported-clusterи укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле. -
Проверьте корректность файлов конфигурации Terraform:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение всех операций с кластером Managed Service for Apache Kafka® 60 минутами.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts, например:
resource "yandex_mdb_kafka_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
Примеры
Создание кластера с одним хостом
Создайте кластер Managed Service for Apache Kafka® с тестовыми характеристиками:
- С именем
mykf. - В окружении
production. - С Apache Kafka® версии 3.9.
- В сети
default. - В подсети с идентификатором
b0rcctk2rvtr********. - В группе безопасности
enp6saqnq4ie********. - С одним хостом-брокером класса
s2.micro, в зоне доступностиkz1-a. - С хранилищем на сетевых SSD-дисках (
network-ssd) объемом 10 ГБ. - С публичным доступом.
- С защитой от непреднамеренного удаления.
Выполните следующую команду:
yc managed-kafka cluster create \
--name mykf \
--environment production \
--version 3.9 \
--network-name default \
--subnet-ids b0rcctk2rvtr******** \
--zone-ids kz1-a \
--brokers-count 1 \
--resource-preset s2.micro \
--disk-size 10 \
--disk-type network-ssd \
--assign-public-ip \
--security-group-ids enp6saqnq4ie******** \
--deletion-protection
Создайте кластер Managed Service for Apache Kafka® с тестовыми характеристиками:
-
В облаке с идентификатором
b1gq90dgh25********. -
В каталоге с идентификатором
b1gia87mbaom********. -
С именем
mykf. -
В окружении
PRODUCTION. -
С Apache Kafka® версии 3.9.
-
В новой сети
mynetи подсетиmysubnetс диапазоном адресов10.5.0.0/24. -
В новой группе безопасности
mykf-sg, разрешающей подключение к кластеру Managed Service for Apache Kafka® из интернета по порту9091. -
С одним хостом-брокером класса
s2.micro, в зоне доступностиkz1-a. -
С хранилищем на сетевых SSD-дисках (
network-ssd) объемом 10 ГБ. -
С публичным доступом.
-
С защитой от непреднамеренного удаления.
Конфигурационный файл для такого кластера Managed Service for Apache Kafka® выглядит так:
resource "yandex_mdb_kafka_cluster" "mykf" {
environment = "PRODUCTION"
name = "mykf"
network_id = yandex_vpc_network.mynet.id
subnet_ids = [ yandex_vpc_subnet.mysubnet.id ]
security_group_ids = [ yandex_vpc_security_group.mykf-sg.id ]
deletion_protection = true
config {
assign_public_ip = true
brokers_count = 1
version = "3.9"
kafka {
resources {
disk_size = 10
disk_type_id = "network-ssd"
resource_preset_id = "s2.micro"
}
kafka_config {}
}
zones = [
"kz1-a"
]
}
}
resource "yandex_vpc_network" "mynet" {
name = "mynet"
}
resource "yandex_vpc_subnet" "mysubnet" {
name = "mysubnet"
zone = "kz1-a"
network_id = yandex_vpc_network.mynet.id
v4_cidr_blocks = ["10.5.0.0/24"]
}
resource "yandex_vpc_security_group" "mykf-sg" {
name = "mykf-sg"
network_id = yandex_vpc_network.mynet.id
ingress {
description = "Kafka"
port = 9091
protocol = "TCP"
v4_cidr_blocks = [ "0.0.0.0/0" ]
}
}
Создание кластера с KRaft в комбинированном режиме
В примере используется конфигурация с тремя зонами доступности и одним брокером в каждой зоне.
Создайте кластер Managed Service for Apache Kafka® с тестовыми характеристиками:
-
С именем
kafka-kraft. -
В окружении
production. -
С Apache Kafka® версии
3.9. -
В сети с идентификатором
enpc6eqfhmj2********. -
В подсетях с идентификаторами:
e9bhbia2scnk********e2lfqbm5nt9r********fl8beqmjckv8********
-
С одним хостом-брокером в каждой зоне доступности:
ru-central1-aru-central1-bru-central1-d
-
С классом хостов
s2.micro. -
С хранилищем на сетевых HDD-дисках (
network-hdd) объемом10ГБ. -
С публичным доступом.
-
В группе безопасности
enp68jq81uun********.
Выполните следующую команду:
yc managed-kafka cluster create \
--name kafka-kraft \
--environment production \
--version 3.9 \
--network-id enpc6eqfhmj2******** \
--subnet-ids e9bhbia2scnk********,e2lfqbm5nt9r********,fl8beqmjckv8******** \
--zone-ids ru-central1-a,ru-central1-b,ru-central1-d \
--brokers-count 1 \
--resource-preset s2.micro \
--disk-size 10 \
--disk-type network-hdd \
--assign-public-ip \
--security-group-ids enp68jq81uun********
Создайте кластер Managed Service for Apache Kafka® с тестовыми характеристиками:
-
С именем
kafka-kraft. -
В окружении
production. -
С Apache Kafka® версии
3.9. -
В новой сети
kafka-netи подсетях для каждой зоны доступности:kafka-subnet-aс диапазоном адресов10.1.0.0/24;kafka-subnet-bс диапазоном адресов10.2.0.0/24;kafka-subnet-dс диапазоном адресов10.3.0.0/24.
-
С одним хостом-брокером в каждой зоне доступности:
ru-central1-aru-central1-bru-central1-d
-
С классом хостов
s2.micro. -
С хранилищем на сетевых HDD-дисках (
network-hdd) объемом10ГБ. -
С публичным доступом.
-
В группе безопасности
kafka-sg, разрешающей весь входящий и исходящий трафик.
Конфигурационный файл для такого кластера Managed Service for Apache Kafka® выглядит так:
resource "yandex_mdb_kafka_cluster" "kafka-kraft" {
name = "kafka-kraft"
environment = "PRODUCTION"
network_id = yandex_vpc_network.kafka-net.id
subnet_ids = [yandex_vpc_subnet.kafka-subnet-a.id, yandex_vpc_subnet.kafka-subnet-b.id, yandex_vpc_subnet.kafka-subnet-d.id]
security_group_ids = [yandex_vpc_security_group.kafka-sg.id]
config {
version = "3.9"
brokers_count = 1
zones = ["ru-central1-a", "ru-central1-b", "ru-central1-d"]
assign_public_ip = true
kafka {
resources {
disk_size = 10
disk_type_id = "network-hdd"
resource_preset_id = "s2.micro"
}
kafka_config {}
}
}
}
resource "yandex_vpc_network" "kafka-net" {
name = "kafka-net"
}
resource "yandex_vpc_subnet" "kafka-subnet-a" {
name = "kafka-subnet-a"
zone = "ru-central1-a"
network_id = yandex_vpc_network.kafka-net.id
v4_cidr_blocks = ["10.1.0.0/24"]
}
resource "yandex_vpc_subnet" "kafka-subnet-b" {
name = "kafka-subnet-b"
zone = "ru-central1-b"
network_id = yandex_vpc_network.kafka-net.id
v4_cidr_blocks = ["10.2.0.0/24"]
}
resource "yandex_vpc_subnet" "kafka-subnet-d" {
name = "kafka-subnet-d"
zone = "ru-central1-d"
network_id = yandex_vpc_network.kafka-net.id
v4_cidr_blocks = ["10.3.0.0/24"]
}
resource "yandex_vpc_security_group" "kafka-sg" {
name = "kafka-sg"
network_id = yandex_vpc_network.kafka-net.id
ingress {
protocol = "ANY"
v4_cidr_blocks = ["0.0.0.0/0"]
}
egress {
protocol = "ANY"
v4_cidr_blocks = ["0.0.0.0/0"]
}
}
Создание кластера с KRaft на отдельных хостах (многохостовый кластер)
Создайте кластер Managed Service for Apache Kafka® с тестовыми характеристиками:
-
С именем
kafka-kraft-mh. -
В окружении
production. -
С Apache Kafka® версии
3.9. -
В сети с идентификатором
enpc6eqfhmj2********. -
В подсетях с идентификаторами:
e9bhbia2scnk********e2lfqbm5nt9r********fl8beqmjckv8********
-
С двумя хостами-брокерами в зоне доступности
ru-central1-a. -
С классом хостов
s2.micro. -
С хранилищем на сетевых HDD-дисках (
network-hdd) объемом10ГБ. -
С классом хостов контроллера KRaft
s2.micro. -
С хранилищем контроллера KRaft на сетевых SSD-дисках (
network-ssd) объемом10ГБ. -
С публичным доступом.
-
В группе безопасности
enp68jq81uun********.
Выполните следующую команду:
yc managed-kafka cluster create \
--name kafka-kraft-mh \
--environment production \
--version 3.9 \
--network-id enpc6eqfhmj2******** \
--subnet-ids e9bhbia2scnk********,e2lfqbm5nt9r********,fl8beqmjckv8******** \
--zone-ids ru-central1-a \
--brokers-count 2 \
--resource-preset s2.micro \
--disk-size 10 \
--disk-type network-hdd \
--controller-resource-preset s2.micro \
--controller-disk-size 10 \
--controller-disk-type network-ssd \
--assign-public-ip \
--security-group-ids enp68jq81uun********
Создайте кластер Managed Service for Apache Kafka® с тестовыми характеристиками:
-
С именем
kafka-kraft-mh. -
В окружении
production. -
С Apache Kafka® версии
3.9. -
В новой сети
kafka-netи подсетях для каждой зоны доступности:kafka-subnet-aс диапазоном адресов10.1.0.0/24;kafka-subnet-bс диапазоном адресов10.2.0.0/24;kafka-subnet-dс диапазоном адресов10.3.0.0/24.
-
С двумя хостами-брокерами в зоне доступности
ru-central1-a. -
С классом хостов
s2.micro. -
С хранилищем на сетевых HDD-дисках (
network-hdd) объемом10ГБ. -
С классом хостов контроллера KRaft
s2.micro. -
С хранилищем контроллера KRaft на сетевых SSD-дисках (
network-ssd) объемом10ГБ. -
С публичным доступом.
-
В группе безопасности
kafka-sg, разрешающей весь входящий и исходящий трафик.
Конфигурационный файл для такого кластера Managed Service for Apache Kafka® выглядит так:
resource "yandex_mdb_kafka_cluster" "kafka-kraft-mh" {
name = "kafka-kraft-mh"
environment = "PRODUCTION"
network_id = yandex_vpc_network.kafka-net.id
subnet_ids = [yandex_vpc_subnet.kafka-subnet-a.id,yandex_vpc_subnet.kafka-subnet-b.id,yandex_vpc_subnet.kafka-subnet-d.id]
security_group_ids = [yandex_vpc_security_group.kafka-sg.id]
config {
version = "3.9"
brokers_count = 2
zones = ["ru-central1-a"]
assign_public_ip = true
kafka {
resources {
disk_size = 10
disk_type_id = "network-hdd"
resource_preset_id = "s2.micro"
}
kafka_config {}
}
kraft {
resources {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 10
}
}
}
}
resource "yandex_vpc_network" "kafka-net" {
name = "kafka-net"
}
resource "yandex_vpc_subnet" "kafka-subnet-a" {
name = "kafka-subnet-a"
zone = "ru-central1-a"
network_id = yandex_vpc_network.kafka-net.id
v4_cidr_blocks = ["10.1.0.0/24"]
}
resource "yandex_vpc_subnet" "kafka-subnet-b" {
name = "kafka-subnet-b"
zone = "ru-central1-b"
network_id = yandex_vpc_network.kafka-net.id
v4_cidr_blocks = ["10.2.0.0/24"]
}
resource "yandex_vpc_subnet" "kafka-subnet-d" {
name = "kafka-subnet-d"
zone = "ru-central1-d"
network_id = yandex_vpc_network.kafka-net.id
v4_cidr_blocks = ["10.3.0.0/24"]
}
resource "yandex_vpc_security_group" "kafka-sg" {
name = "kafka-sg"
network_id = yandex_vpc_network.kafka-net.id
ingress {
protocol = "ANY"
v4_cidr_blocks = ["0.0.0.0/0"]
}
egress {
protocol = "ANY"
v4_cidr_blocks = ["0.0.0.0/0"]
}
}
Создание кластера с ZooKeeper на отдельных хостах (многохостовый кластер)
Создайте кластер Managed Service for Apache Kafka® с тестовыми характеристиками:
-
С именем
kafka-zk-mh. -
В окружении
production. -
С Apache Kafka® версии
3.9. -
В сети с идентификатором
enpc6eqfhmj2********. -
В подсетях с идентификаторами:
e9bhbia2scnk********e2lfqbm5nt9r********fl8beqmjckv8********
-
С двумя хостами-брокерами в зоне доступности
ru-central1-a. -
С классом хостов
s2.micro. -
С хранилищем на сетевых HDD-дисках (
network-hdd) объемом10ГБ. -
С классом хостов ZooKeeper
s2.micro. -
С хранилищем ZooKeeper на сетевых SSD-дисках (
network-ssd) объемом10ГБ. -
С публичным доступом.
-
В группе безопасности
enp68jq81uun********.
Выполните следующую команду:
yc managed-kafka cluster create \
--name kafka-zk-mh \
--environment production \
--version 3.9 \
--network-id enpc6eqfhmj2******** \
--subnet-ids e9bhbia2scnk********,e2lfqbm5nt9r********,fl8beqmjckv8******** \
--zone-ids ru-central1-a \
--brokers-count 2 \
--resource-preset s2.micro \
--disk-size 10 \
--disk-type network-hdd \
--zookeeper-resource-preset s2.micro \
--zookeeper-disk-size 10 \
--zookeeper-disk-type network-ssd \
--assign-public-ip \
--security-group-ids enp68jq81uun********
Создайте кластер Managed Service for Apache Kafka® с тестовыми характеристиками:
-
С именем
kafka-zk-mh. -
В окружении
production. -
С Apache Kafka® версии
3.9. -
В новой сети
kafka-netи подсетях для каждой зоны доступности:kafka-subnet-aс диапазоном адресов10.1.0.0/24;kafka-subnet-bс диапазоном адресов10.2.0.0/24;kafka-subnet-dс диапазоном адресов10.3.0.0/24.
-
С двумя хостами-брокерами в зоне доступности
ru-central1-a. -
С классом хостов
s2.micro. -
С хранилищем на сетевых HDD-дисках (
network-hdd) объемом10ГБ. -
С классом хостов ZooKeeper
s2.micro. -
С хранилищем ZooKeeper на сетевых SSD-дисках (
network-ssd) объемом10ГБ. -
С публичным доступом.
-
В группе безопасности
kafka-sg, разрешающей весь входящий и исходящий трафик.
Конфигурационный файл для такого кластера Managed Service for Apache Kafka® выглядит так:
resource "yandex_mdb_kafka_cluster" "kafka-zk-mh" {
name = "kafka-zk-mh"
environment = "PRODUCTION"
network_id = yandex_vpc_network.kafka-net.id
subnet_ids = [yandex_vpc_subnet.kafka-subnet-a.id,yandex_vpc_subnet.kafka-subnet-b.id,yandex_vpc_subnet.kafka-subnet-d.id]
security_group_ids = [yandex_vpc_security_group.kafka-sg.id]
config {
version = "3.9"
brokers_count = 2
zones = ["ru-central1-a"]
assign_public_ip = true
kafka {
resources {
disk_size = 10
disk_type_id = "network-hdd"
resource_preset_id = "s2.micro"
}
kafka_config {}
}
zookeeper {
resources {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 10
}
}
}
}
resource "yandex_vpc_network" "kafka-net" {
name = "kafka-net"
}
resource "yandex_vpc_subnet" "kafka-subnet-a" {
name = "kafka-subnet-a"
zone = "ru-central1-a"
network_id = yandex_vpc_network.kafka-net.id
v4_cidr_blocks = ["10.1.0.0/24"]
}
resource "yandex_vpc_subnet" "kafka-subnet-b" {
name = "kafka-subnet-b"
zone = "ru-central1-b"
network_id = yandex_vpc_network.kafka-net.id
v4_cidr_blocks = ["10.2.0.0/24"]
}
resource "yandex_vpc_subnet" "kafka-subnet-d" {
name = "kafka-subnet-d"
zone = "ru-central1-d"
network_id = yandex_vpc_network.kafka-net.id
v4_cidr_blocks = ["10.3.0.0/24"]
}
resource "yandex_vpc_security_group" "kafka-sg" {
name = "kafka-sg"
network_id = yandex_vpc_network.kafka-net.id
ingress {
protocol = "ANY"
v4_cidr_blocks = ["0.0.0.0/0"]
}
egress {
protocol = "ANY"
v4_cidr_blocks = ["0.0.0.0/0"]
}
}