Создание кластера Apache Kafka®
Кластер Managed Service for Apache Kafka® — один или несколько хостов-брокеров, на которых размещены топики и соответствующие топикам разделы. Производители и потребители могут работать с этими топиками, подключившись к хостам кластера Managed Service for Apache Kafka®.
Примечание
- Количество хостов-брокеров, которые можно создать вместе с кластером Managed Service for Apache Kafka®, зависит от выбранного типа диска и класса хостов.
- Доступные типы диска зависят от выбранного класса хостов.
Важно
Если вы создаете кластер из более чем одного хоста, в кластер будут добавлены три выделенных хоста ZooKeeper. Подробнее см. в разделе Взаимосвязь ресурсов в Managed Service for Apache Kafka®.
Создать кластер 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®.
-
Чтобы управлять схемами данных с помощью Managed Schema Registry, включите настройку Реестр схем данных.
Важно
Настройку Реестр схем данных невозможно отключить после ее включения.
-
-
В блоке Класс хоста выберите платформу, тип хостов и класс хостов.
Класс хостов определяет технические характеристики виртуальных машин, на которых будут развернуты брокеры 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® с одной зоной доступности, в дальнейшем увеличить количество зон и брокеров будет невозможно.
-
Выберите сеть.
-
Выберите подсети в каждой зоне доступности для этой сети. Чтобы создать новую подсеть, нажмите на кнопку Создать новую рядом с нужной зоной доступности.
Примечание
Для кластера Managed Service for Apache Kafka® из нескольких хостов-брокеров нужно указать подсети в каждой зоне доступности, даже если вы планируете разместить брокеры только в некоторых из них. Эти подсети понадобятся для размещения трех хостов ZooKeeper — по одному в каждой зоне доступности. Подробнее см. в разделе Взаимосвязь ресурсов сервиса.
-
Выберите группы безопасности для сетевого трафика кластера Managed Service for Apache Kafka®.
-
Для доступа к хостам-брокерам из интернета выберите опцию Публичный доступ. В этом случае подключаться к ним можно только с использованием SSL-соединения. Подробнее см. в разделе Подключение к топикам в кластере.
-
-
В блоке Хосты:
-
Укажите количество хостов-брокеров Apache Kafka® для размещения в каждой выбранной зоне доступности.
При выборе количества хостов учтите следующие особенности:
-
Репликация возможна при наличии как минимум двух хостов в кластере Managed Service for Apache Kafka®.
-
Если в блоке Хранилище выбран тип
local-ssd
илиnetwork-ssd-nonreplicated
, необходимо добавить не менее трех хостов в кластер Managed Service for Apache Kafka®. -
Для отказоустойчивости кластера Managed Service for Apache Kafka® должны выполняться определенные условия.
-
Добавление в кластер Managed Service for Apache Kafka® более одного хоста приведет к автоматическому добавлению трех хостов ZooKeeper.
-
-
(Опционально) Выберите группы выделенных хостов, на которых будет размещен кластер Managed Service for Apache Kafka®.
Внимание
Эту настройку нельзя изменить после создания кластера. Использование выделенных хостов существенно влияет на тарификацию кластера.
-
-
Если вы указали более одного хоста-брокера, то в блоке Класс хоста ZooKeeper укажите характеристики хостов ZooKeeper для размещения в каждой выбранной зоне доступности.
-
При необходимости задайте дополнительные настройки кластера Managed Service for Apache Kafka®:
-
Окно обслуживания — настройки времени технического обслуживания:
- Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт произвольное (по умолчанию).
- Чтобы указать предпочтительное время начала обслуживания, выберите пункт по расписанию и укажите нужные день недели и час дня по UTC. Например, можно выбрать время, когда кластер наименее загружен.
Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать в себя: обновление СУБД, применение патчей и так далее.
-
Доступ из Data Transfer в режиме Serverless — включите эту опцию, чтобы разрешить доступ к кластеру из сервиса Yandex Data Transfer в Serverless-режиме.
Это позволит через специальную сеть подключаться к Yandex Data Transfer, запущенному в Kubernetes. В результате будут быстрее выполняться, например, запуск и деактивация трансфера.
-
Защита от удаления — управляет защитой кластера от непреднамеренного удаления пользователем.
Включенная защита от удаления кластера не помешает подключиться к нему вручную и удалить данные.
-
Реестр схем данных — включите эту опцию, чтобы управлять схемами данных с помощью Managed Schema Registry.
Важно
Настройку Реестр схем данных невозможно отключить после ее включения.
-
-
При необходимости задайте настройки Apache Kafka®.
-
Нажмите кнопку Создать.
-
Дождитесь, когда кластер Managed Service for Apache Kafka® будет готов к работе: его статус на панели Managed Service for Apache Kafka® сменится на
Running
, а состояние — наAlive
. Это может занять некоторое время.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Посмотрите описание команды 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 <идентификаторы_подсетей> \ --brokers-count <количество_брокеров_в_зоне> \ --resource-preset <класс_хоста> \ --disk-type <тип_диска> \ --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. -
--disk-type
— тип хранилища:local-ssd
илиlocal-hdd
. -
--deletion-protection
— защита кластера от непреднамеренного удаления пользователем:true
илиfalse
.
Совет
При необходимости здесь же можно задать настройки 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
.
-
Чтобы разрешить доступ к кластеру из сервиса Yandex Data Transfer в Serverless-режиме, передайте параметр
--datatransfer-access
.Это позволит через специальную сеть подключаться к Yandex Data Transfer, запущенному в Kubernetes. В результате будут быстрее выполняться, например, запуск и деактивация трансфера.
-
Чтобы создать кластер Managed Service for Apache Kafka®, размещенный на группах выделенных хостов, укажите через запятую их идентификаторы в параметре
--host-group-ids
при создании кластера:yc managed-kafka cluster create \ ... --host-group-ids <идентификаторы_групп_выделенных_хостов>
Внимание
Эту настройку нельзя изменить после создания кластера. Использование выделенных хостов существенно влияет на тарификацию кластера.
Terraform
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
При изменении файлов конфигураций 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 { assign_public_ip = "<публичный_доступ>" brokers_count = <количество_брокеров> version = "<версия>" schema_registry = "<управление_схемами_данных>" kafka { resources { disk_size = <размер_хранилища_ГБ> disk_type_id = "<тип_диска>" resource_preset_id = "<класс_хоста>" } kafka_config {} } zones = [ "<зоны_доступности>" ] } } resource "yandex_vpc_network" "<имя_сети>" { name = "<имя_сети>" } resource "yandex_vpc_subnet" "<имя_подсети>" { name = "<имя_подсети>" zone = "<зона_доступности>" network_id = "<идентификатор_сети>" v4_cidr_blocks = ["<диапазон>"] }
Где:
environment
— окружение кластера:PRESTABLE
илиPRODUCTION
.deletion_protection
— защита от удаления кластера:true
илиfalse
.assign_public_ip
— публичный доступ к кластеру:true
илиfalse
.version
— версия Apache Kafka®: 2.8, 3.0, 3.1, 3.2, 3.3, 3.4 или 3.5.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 минут
}
}
Чтобы создать кластер Managed Service for Apache Kafka®, воспользуйтесь методом REST API create для ресурса Cluster или вызовом gRPC API ClusterService/Create и передайте в запросе:
-
Идентификатор каталог, в котором должен быть размещен кластер Managed Service for Apache Kafka®, в параметре
folderId
. -
Имя кластера Managed Service for Apache Kafka® в параметре
name
. -
Идентификаторы групп безопасности в параметре
securityGroupIds
. -
Настройки времени технического обслуживания (в т. ч. для выключенных кластеров Managed Service for Apache Kafka®) в параметре
maintenanceWindow
. -
Настройки защиты от удаления кластера Managed Service for Apache Kafka® в параметре
deletionProtection
.Включенная защита от удаления кластера не помешает подключиться к нему вручную и удалить данные.
Чтобы управлять схемами данных с помощью Managed Schema Registry, передайте значение true
для параметра configSpec.schemaRegistry
. Эту настройку невозможно изменить после создания кластера Managed Service for Apache Kafka®.
Чтобы разрешить доступ к кластеру из сервиса Yandex Data Transfer в Serverless-режиме, передайте значение true
для параметра configSpec.access.dataTransfer
.
Это позволит через специальную сеть подключаться к Yandex Data Transfer, запущенному в Kubernetes. В результате будут быстрее выполняться, например, запуск и деактивация трансфера.
Чтобы создать кластер Managed Service for Apache Kafka®, размещенный на группах выделенных хостов, передайте список их идентификаторов в параметре hostGroupIds
.
Внимание
Эту настройку нельзя изменить после создания кластера. Использование выделенных хостов существенно влияет на тарификацию кластера.
Важно
Если вы указали идентификаторы групп безопасности при создании кластера Managed Service for Apache Kafka®, для подключения к нему может потребоваться дополнительная настройка групп безопасности.
Импортировать кластер в Terraform
С помощью импорта вы можете передать существующие кластеры под управление Terraform.
-
Укажите в конфигурационном файле Terraform кластер, который необходимо импортировать:
resource "yandex_mdb_kafka_cluster" "<имя_кластера>" {}
-
Выполните команду для импорта кластера:
terraform import yandex_mdb_kafka_cluster.<имя_кластера> <идентификатор_кластера>
Подробнее об импорте кластеров см. в документации провайдера Terraform
.
Примеры
Создание кластера с одним хостом
Создайте кластер 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=true
Создайте кластер 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" ]
}
}