Создание кластера Apache Kafka®
Кластер Managed Service for Apache Kafka® — один или несколько хостов-брокеров, на которых размещены топики и соответствующие топикам разделы. Производители и потребители могут работать с этими топиками, подключившись к хостам кластера Managed Service for Apache Kafka®.
Примечание
- Количество хостов-брокеров, которые можно создать вместе с кластером Managed Service for Apache Kafka®, зависит от выбранного типа диска и класса хостов.
- Доступные типы диска зависят от выбранного класса хостов.
Примечание
С 1 февраля 2025 года будет прекращена поддержка Apache Kafka® версий 2.8, 3.0, 3.1, 3.2 и 3.3. Создать кластер с этими версиями будет невозможно.
Различия в конфигурации кластеров с ZooKeeper и протоколом Apache Kafka® Raft
Если вы создаете кластер с версией Apache Kafka® 3.5 или ниже, в котором больше одного хоста, то в кластер будут добавлены три выделенных хоста ZooKeeper.
В кластерах с версией Apache Kafka® 3.6 и выше поддержан протокол Apache Kafka® Raft (сокращенно KRaft). Он используется для хранения метаданных вместо ZooKeeper.
При создании кластера с протоколом KRaft действуют ограничения на конфигурацию:
- Можно создать кластер только с одной или тремя зонами доступности.
- Ограничено количество хостов-брокеров:
- Если выбрана одна зона доступности, можно создать один или три хоста-брокера.
- Если выбраны три зоны доступности, можно создать только один хост-брокер.
Подробнее о различиях в конфигурации кластеров с ZooKeeper и KRaft см. в разделе Взаимосвязь ресурсов в Managed Service for Apache Kafka®.
Перед началом работы
- Рассчитайте минимальный размер хранилища для топиков.
- Убедитесь, что у вашего аккаунта есть роль vpc.user и роль managed-kafka.editor или выше.
Если вы указываете идентификаторы групп безопасности при создании кластера Managed Service for Apache Kafka®, для подключения к нему может понадобиться дополнительная настройка групп безопасности.
Создать кластер
Чтобы создать кластер 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® 3.6 и выше можно выбрать только одну или три зоны доступности. -
Выберите сеть.
-
Выберите подсети в каждой зоне доступности для этой сети. Чтобы создать новую подсеть, нажмите на кнопку Создать новую рядом с нужной зоной доступности.
Примечание
Для кластера с версией Apache Kafka® 3.5 или ниже, в котором несколько хостов-брокеров, укажите подсети в каждой зоне доступности, даже если вы планируете разместить хосты-брокеры только в некоторых из них. Эти подсети понадобятся для размещения трех хостов ZooKeeper — по одному в каждой зоне доступности. Подробнее см. в разделе Взаимосвязь ресурсов сервиса.
-
Выберите группы безопасности для сетевого трафика кластера Managed Service for Apache Kafka®.
-
Для доступа к хостам-брокерам из интернета выберите опцию Публичный доступ. В этом случае подключаться к ним можно только с использованием SSL-соединения. Подробнее см. в разделе Подключение к топикам в кластере.
-
-
В блоке Хосты:
-
Укажите количество хостов-брокеров Apache Kafka® для размещения в каждой выбранной зоне доступности.
При выборе количества хостов учтите следующие особенности:
-
В версиях Apache Kafka® 3.6 и выше количество хостов-брокеров зависит от выбранных зон доступности:
- Одна зона доступности — один или три хоста-брокера. Чтобы использовать три хоста-брокера, включите настройку Комбинированный режим.
- Три зоны доступности — один хост-брокер.
Задать количество хостов-брокеров вручную нельзя.
-
Репликация возможна при наличии как минимум двух хостов в кластере Managed Service for Apache Kafka®.
-
Если в блоке Хранилище выбран тип
local-ssd
илиnetwork-ssd-nonreplicated
, необходимо добавить не менее трех хостов в кластер Managed Service for Apache Kafka®. -
Для отказоустойчивости кластера Managed Service for Apache Kafka® должны выполняться определенные условия.
-
Добавление в кластер с версией Apache Kafka® 3.5 или ниже более одного хоста приведет к автоматическому добавлению трех хостов ZooKeeper.
-
-
(Опционально) Выберите группы выделенных хостов, на которых будет размещен кластер Managed Service for Apache Kafka®.
Внимание
Эту настройку нельзя изменить после создания кластера. Использование выделенных хостов существенно влияет на тарификацию кластера.
-
-
Если вы создаете кластер с версией Apache Kafka® 3.5 или ниже и указали более одного хоста-брокера, то в блоке Класс хоста ZooKeeper укажите характеристики хостов ZooKeeper для размещения в каждой выбранной зоне доступности.
-
При необходимости задайте дополнительные настройки кластера Managed Service for Apache Kafka®:
-
Окно обслуживания — настройки времени технического обслуживания:
- Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт произвольное (по умолчанию).
- Чтобы указать предпочтительное время начала обслуживания, выберите пункт по расписанию и укажите нужные день недели и час дня по UTC. Например, можно выбрать время, когда кластер наименее загружен.
Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать в себя: обновление СУБД, применение патчей и так далее.
-
Защита от удаления — управляет защитой кластера, его баз данных и пользователей от непреднамеренного удаления.
Включенная защита от удаления кластера не помешает подключиться к нему вручную и удалить данные.
-
Чтобы управлять схемами данных с помощью Managed Schema Registry, включите настройку Реестр схем данных.
Важно
Настройку Реестр схем данных невозможно отключить после ее включения.
-
Чтобы разрешить отправку запросов к API Apache Kafka®, включите настройку Kafka Rest API.
В качестве реализации используется приложение с открытым исходным кодом Karapace
. API Karapace совместимо с API Confluent REST Proxy за исключением небольших расхождений.Важно
Настройку Kafka Rest API невозможно отключить после ее включения.
-
-
При необходимости задайте настройки Apache Kafka®.
-
Нажмите кнопку Создать.
-
Дождитесь, когда кластер Managed Service for Apache Kafka® будет готов к работе: его статус на панели Managed Service for Apache Kafka® сменится на
Running
, а состояние — наAlive
. Это может занять некоторое время.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Важно
При создании кластера с KRaft не указывайте настройки ZooKeeper.
Чтобы создать кластер 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 <версия> \ --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
Где:
-
--environment
— окружение кластера:prestable
илиproduction
. -
--version
— версия Apache Kafka®: 2.8, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5 или 3.6. -
--zone-ids
и--brokers-count
— зоны доступности и число хостов-брокеров в каждой зоне.Для кластеров с версией Apache Kafka® 3.6 и выше доступны только следующие конфигурации:
--zone-ids=ru-central1-a,ru-central1-b,ru-central1-d --brokers-count=1
;--zone-ids=<одна_зона_доступности> --brokers-count=1
;--zone-ids=<одна_зона_доступности> --brokers-count=3
.
-
--resource-preset
— класс хостов. -
--disk-type
— тип диска.Важно
Тип диска нельзя изменить после создания кластера.
-
--deletion-protection
— защита кластера, его баз данных и пользователей от непреднамеренного удаления.Включенная защита от удаления кластера не помешает подключиться к нему вручную и удалить данные.
Совет
При необходимости здесь же можно задать настройки Apache Kafka®.
-
-
Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров Managed Service for Apache Kafka®), передайте нужное значение в параметре
--maintenance-window
при создании кластера:yc managed-kafka cluster create \ ... --maintenance-window type=<тип_технического_обслуживания>,` `day=<день_недели>,` `hour=<час_дня> \
Где
type
— тип технического обслуживания:anytime
(по умолчанию) — в любое время.weekly
— по расписанию. При задании этого значения укажите день недели и час дня:day
— день недели в форматеDDD
:MON
,TUE
,WED
,THU
,FRI
,SAT
илиSUN
.hour
— час дня по UTC в форматеHH
: от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
, автоматическое увеличение размера хранилища будет отключено.
Важно
- Размер хранилища нельзя уменьшить.
- Во время изменения размера хранилища хосты кластера будут недоступны.
-
-
Чтобы создать кластер Managed Service for Apache Kafka®, размещенный на группах выделенных хостов, укажите через запятую их идентификаторы в параметре
--host-group-ids
при создании кластера:yc managed-kafka cluster create \ ... --host-group-ids <идентификаторы_групп_выделенных_хостов>
Внимание
Эту настройку нельзя изменить после создания кластера. Использование выделенных хостов существенно влияет на тарификацию кластера.
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Важно
При создании кластера с KRaft не указывайте настройки ZooKeeper.
Чтобы создать кластер 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 { 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®: 2.8, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5 или 3.6. -
zones
иbrokers_count
— зоны доступности и число хостов-брокеров в каждой зоне.Если вы создаете кластер с версией Apache Kafka® 3.6 и выше, укажите одну из доступных конфигураций:
zones = ["ru-central1-a","ru-central1-b","ru-central1-d"] brokers_count = 1
;zones = ["<одна_зона_доступности>"] brokers_count = 1
;zones = ["<одна_зона_доступности>"] brokers_count = 3
.
-
deletion_protection
— защита от удаления кластера:true
илиfalse
. -
assign_public_ip
— публичный доступ к кластеру:true
илиfalse
. -
schema_registry
— управление схемами данных:true
илиfalse
.
Включенная защита от удаления кластера не помешает подключиться к нему вручную и удалить данные.
Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров), добавьте к описанию кластера блок
maintenance_window
:resource "yandex_mdb_kafka_cluster" "<имя_кластера>" { ... maintenance_window { type = <тип_технического_обслуживания> day = <день_недели> hour = <час_дня> } ... }
Где:
type
— тип технического обслуживания. Принимает значения:ANYTIME
— в любое время.WEEKLY
— по расписанию.
day
— день недели для типаWEEKLY
в форматеDDD
. Например,MON
.hour
— час дня по UTC для типаWEEKLY
в форматеHH
. Например,21
.
-
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы 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 минут
}
}
Важно
При создании кластера с KRaft не указывайте настройки ZooKeeper.
-
Получите 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": <публичный_доступ:_true_или_false>, "schemaRegistry": <управление_схемами_данных:_true_или_false>, "restApiConfig": { "enabled": <отправка_запросов_к_API_Apache Kafka®:_true_или_false> }, "diskSizeAutoscaling": { <параметры_автоматического_увеличения_размера_хранилища> }, }, "topicSpecs": [ { "name": "<имя_топика>", "partitions": "<количество_партиций>", "replicationFactor": "<фактор_репликации>" }, { <аналогичный_набор_настроек_для_топика_2> }, { ... }, { <аналогичный_набор_настроек_для_топика_N> } ], "userSpecs": [ { "name": "<имя_пользователя>", "password": "<пароль_пользователя>", "permissions": [ { "topicName": "<имя_топика>", "role": "<роль_пользователя>" } ] }, { <аналогичный_набор_настроек_для_пользователя_2> }, { ... }, { <аналогичный_набор_настроек_для_пользователя_N> } ], "maintenanceWindow": { "anytime": {}, "weeklyMaintenanceWindow": { "day": "<день_недели>", "hour": "<час_дня_по_UTC>" } }, "deletionProtection": <защита_от_удаления:_true_или_false> }
Где:
-
name
— имя кластера. -
environment
— окружение кластера:PRODUCTION
илиPRESTABLE
. -
networkId
— идентификатор сети, в которой будет размещен кластер. -
securityGroupIds
— идентификаторы групп безопасности в виде массива строк. Каждая строка — идентификатор группы безопасности. -
configSpec
— конфигурация кластера:-
version
— версия Apache Kafka®: 2.8, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5 или 3.6. -
kafka
— конфигурация Apache Kafka®:resources.resourcePresetId
— идентификатор класса хостов. Список доступных классов хостов с их идентификаторами можно запросить с помощью метода ResourcePreset.list.resources.diskSize
— размер диска в байтах.resources.diskTypeId
— тип диска.
-
zookeeper
— конфигурация ZooKeeper:resources.resourcePresetId
— идентификатор класса хостов. Список доступных классов хостов с их идентификаторами можно запросить с помощью метода ResourcePreset.list.resources.diskSize
— размер диска в байтах.resources.diskTypeId
— тип диска.
-
zoneId
иbrokersCount
– зоны доступности и число хостов-брокеров в каждой зоне.Если вы создаете кластер с версией Apache Kafka® 3.6 и выше, укажите одну из доступных конфигураций:
"zoneId": ["ru-central1-a","ru-central1-b","ru-central1-d"], "brokersCount": "1"
;"zoneId": ["<одна_зона_доступности>"], "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
– максимальный размер хранилища (в байтах), который может быть установлен при достижении одного из заданных процентов заполнения.
-
-
-
topicSpecs
— настройки топиков в виде массива элементов. Каждый элемент соответствует отдельному топику и имеет следующую структуру:name
— имя топика.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
.Включенная защита от удаления не помешает подключиться вручную и удалить содержимое базы данных.
Чтобы создать кластер Managed Service for Apache Kafka®, размещенный на группах выделенных хостов, передайте список их идентификаторов в параметре
hostGroupIds
.Внимание
Эту настройку нельзя изменить после создания кластера. Использование выделенных хостов существенно влияет на тарификацию кластера.
Идентификатор каталога можно запросить со списком каталогов в облаке.
-
-
Выполните запрос:
curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-kafka/v1/clusters' \ --data '@body.json'
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Важно
При создании кластера с KRaft не указывайте настройки ZooKeeper.
-
Получите 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": "<тип_диска>" } }, "zookeeper": { "resources": { "resource_preset_id": "<класс_хостов ZooKeeper>", "disk_size": "<размер_хранилища_в_байтах>", "disk_type_id": "<тип_диска>" } }, "zone_id": [ <список_зон_доступности> ], "brokers_count": { "value": "<количество_брокеров_в_зоне>" }, "assign_public_ip": <публичный_доступ:_true_или_false>, "schema_registry": <управление_схемами_данных:_true_или_false>, "rest_api_config": { "enabled": <отправка_запросов_к_API_Apache Kafka®:_true_или_false> }, "disk_size_autoscaling": { <параметры_автоматического_увеличения_размера_хранилища> }, }, "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": <защита_от_удаления:_true_или_false> }
Где:
-
name
— имя кластера. -
environment
— окружение кластера:PRODUCTION
илиPRESTABLE
. -
network_id
— идентификатор сети, в которой будет размещен кластер. -
security_group_ids
— идентификаторы групп безопасности в виде массива строк. Каждая строка — идентификатор группы безопасности. -
config_spec
— конфигурация кластера:-
version
— версия Apache Kafka®: 2.8, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5 или 3.6. -
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
).Если вы создаете кластер с версией Apache Kafka® 3.6 и выше, укажите одну из доступных конфигураций:
"zone_id": ["ru-central1-a","ru-central1-b","ru-central1-d"], "brokers_count": {"value":"1"}
;"zone_id": ["<одна_зона_доступности>"], "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
– максимальный размер хранилища (в байтах), который может быть установлен при достижении одного из заданных процентов заполнения.
-
-
-
topic_specs
— настройки топиков в виде массива элементов. Каждый элемент соответствует отдельному топику и имеет следующую структуру:name
— имя топика.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
.Включенная защита от удаления не помешает подключиться вручную и удалить содержимое базы данных.
Чтобы создать кластер Managed Service for Apache Kafka®, размещенный на группах выделенных хостов, передайте список их идентификаторов в параметре
host_group_ids
.Внимание
Эту настройку нельзя изменить после создания кластера. Использование выделенных хостов существенно влияет на тарификацию кластера.
Идентификатор каталога можно запросить со списком каталогов в облаке.
-
-
Выполните запрос:
curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-kafka/v1/clusters' \ --data '@body.json'
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Чтобы убедиться, что созданный кластер с версией Apache Kafka® 3.6 или выше использует протокол KRaft, получите информацию о хостах кластера:
- В консоли управления
перейдите в нужный каталог. - В списке сервисов выберите Managed Service for Kafka.
- Нажмите на имя нужного кластера, затем выберите вкладку Хосты.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы получить список хостов в кластере, выполните команду:
yc managed-kafka cluster list-hosts <имя_или_идентификатор_кластера>
Идентификатор и имя кластера можно запросить со списком кластеров в каталоге.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Воспользуйтесь методом Cluster.listHosts и выполните запрос, например, с помощью cURL
:curl \ --request GET \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://mdb.api.cloud.yandex.net/managed-kafka/v1/clusters/<идентификатор_кластера>/hosts'
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Воспользуйтесь вызовом ClusterService/ListHosts и выполните запрос, например, с помощью 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": "<идентификатор_кластера>" }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.kafka.v1.ClusterService.ListHosts
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Отсутствие хостов ZooKeeper говорит о том, что в кластере используется протокол KRaft.
Создать копию кластера
Вы можете создать кластер 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.5.
- В сети
default
. - В подсети с идентификатором
b0rcctk2rvtr********
. - В группе безопасности
enp6saqnq4ie********
. - С одним хостом класса
s2.micro
, в зоне доступностиru-central1-a
. - С одним хостом-брокером.
- С хранилищем на сетевых SSD-дисках (
network-ssd
) объемом 10 ГБ. - С публичным доступом.
- С защитой от случайного удаления кластера Managed Service for Apache Kafka®.
Выполните следующую команду:
yc managed-kafka cluster create \
--name mykf \
--environment production \
--version 3.5 \
--network-name default \
--subnet-ids b0rcctk2rvtr******** \
--zone-ids ru-central1-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.5.
-
В новой сети
mynet
с подсетьюmysubnet
. -
В новой группе безопасности
mykf-sg
, разрешающей подключение к кластеру Managed Service for Apache Kafka® из интернета по порту9091
. -
С одним хостом класса
s2.micro
, в зоне доступностиru-central1-a
. -
С одним хостом-брокером.
-
С хранилищем на сетевых SSD-дисках (
network-ssd
) объемом 10 ГБ. -
С публичным доступом.
-
С защитой от случайного удаления кластера Managed Service for Apache Kafka®.
Конфигурационный файл для такого кластера 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.5"
kafka {
resources {
disk_size = 10
disk_type_id = "network-ssd"
resource_preset_id = "s2.micro"
}
kafka_config {}
}
zones = [
"ru-central1-a"
]
}
}
resource "yandex_vpc_network" "mynet" {
name = "mynet"
}
resource "yandex_vpc_subnet" "mysubnet" {
name = "mysubnet"
zone = "ru-central1-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" ]
}
}