Создание кластера Apache Kafka®
Кластер Managed Service for Apache Kafka® — это один или несколько хостов-брокеров, на которых размещены топики и соответствующие топикам разделы. Производители и потребители могут работать с этими топиками, подключившись к хостам кластера.
Примечание
- Количество хостов-брокеров, которые можно создать вместе с кластером Apache Kafka®, зависит от выбранного типа диска и класса хостов.
- Доступные типы диска зависят от выбранного класса хостов.
Важно
Если вы создаете кластер из более чем одного хоста, в кластер будут добавлены три выделенных хоста ZooKeeper. Подробнее см. в разделе Взаимосвязь ресурсов в Managed Service for Apache Kafka®.
Как создать кластер Managed Service for Apache Kafka®
Перед созданием кластера рассчитайте минимальный размер хранилища для топиков.
-
В консоли управления перейдите в нужный каталог.
-
В списке сервисов выберите Managed Service for Apache Kafka®.
-
Нажмите кнопку Создать кластер.
-
В блоке Базовые параметры:
-
Введите имя кластера и, при необходимости, его описание. Имя кластера должно быть уникальным в рамках каталога.
-
Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):
PRODUCTION
— для стабильных версий ваших приложений.PRESTABLE
— для тестирования, в том числе самого сервиса Managed Service for Apache Kafka®. В Prestable-окружении раньше появляются новая функциональность, улучшения и исправления ошибок. При этом не все обновления обеспечивают обратную совместимость.
-
Выберите версию Apache Kafka®.
-
Чтобы управлять топиками через Admin API Apache Kafka®:
- Включите настройку Управление топиками через API.
- После создания кластера создайте пользователя-администратора.
Включенную настройку управления топиками через Apache Kafka® Admin API невозможно выключить. При необходимости ее можно включить позже при изменении настроек кластера.
-
Чтобы управлять схемами данных с помощью Managed Schema Registry, включите настройку Реестр схем данных.
Важно
Настройку Реестр схем данных невозможно изменить после создания кластера.
-
-
В блоке Класс хоста выберите платформу, тип хостов и класс хостов.
Класс хостов определяет технические характеристики виртуальных машин, на которых будут развернуты брокеры Apache Kafka®. Все доступные варианты перечислены в разделе Классы хостов.
При изменении класса хостов для кластера меняются характеристики всех уже созданных экземпляров.
-
В блоке Хранилище:
-
Выберите тип диска.
От выбранного типа дисков зависит, с каким шагом можно будет изменить размер хранилища:
- хранилище на локальных SSD-дисках — с шагом 100 ГБ;
- хранилище на нереплицируемых SSD-дисках — с шагом 93 ГБ;
- хранилища на сетевых SSD- и HDD-дисках — с шагом 1 ГБ.
Тип диска для кластера Managed Service for Apache Kafka® нельзя изменить после создания.
-
Выберите объем хранилища, который будет использоваться для данных.
-
-
В блоке Сетевые настройки:
-
Выберите одну или несколько зон доступности, в которых нужно разместить брокеры Apache Kafka®. Если создать кластер с одной зоной доступности, то в дальнейшем увеличить количество зон и брокеров будет невозможно.
-
Выберите сеть.
-
Выберите подсети в каждой зоне доступности для этой сети. Чтобы создать новую подсеть, нажмите на кнопку Создать новую рядом с нужной зоной доступности.
Примечание
Для кластера из нескольких хостов-брокеров нужно указать подсети в каждой зоне доступности, даже если вы планируете разместить брокеры только в некоторых из них. Эти подсети понадобятся для размещения трех хостов ZooKeeper — по одному в каждой зоне доступности. Подробнее см. в разделе Взаимосвязь ресурсов в Managed Service for Apache Kafka®.
-
Выберите группы безопасности для сетевого трафика кластера.
-
Для доступа к хостам-брокерам из интернета выберите опцию Публичный доступ. В этом случае подключаться к ним можно только с использованием SSL-соединения. Запросить публичный доступ после создания кластера невозможно. Подробнее см. в разделе Подключение к топикам в кластере Apache Kafka®.
-
-
В блоке Хосты:
-
Укажите количество хостов-брокеров Apache Kafka® для размещения в каждой выбранной зоне доступности.
При выборе количества хостов учитывайте, что:
- Хосты кластера Apache Kafka® будут равномерно расположены в выбранных зонах доступности. Количество зон и хостов в зоне следует выбирать исходя из требуемой модели отказоустойчивости и нагрузки на кластер.
- Репликация возможна при наличии как минимум двух хостов в кластере.
- Если в блоке Хранилище выбран тип
local-ssd
илиnetwork-ssd-nonreplicated
, то необходимо добавить не менее трех хостов в кластер. - Добавление в кластер более одного хоста приведет к автоматическому добавлению трех хостов ZooKeeper.
-
(Опционально) Выберите группы выделенных хостов, на которых будет размещен кластер.
Внимание
Эту настройку нельзя изменить после создания кластера. Использование выделенных хостов существенно влияет на тарификацию кластера.
-
-
Если вы указали более одного хоста-брокера, то в блоке Класс хоста ZooKeeper укажите характеристики хостов ZooKeeper для размещения в каждой выбранной зоне доступности.
-
При необходимости задайте дополнительные настройки кластера:
-
Окно обслуживания — настройки времени технического обслуживания:
- Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт произвольное (по умолчанию).
- Чтобы указать предпочтительное время начала обслуживания, выберите пункт по расписанию и укажите нужные день недели и час дня по UTC. Например, можно выбрать время, когда кластер наименее загружен.
Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать в себя: обновление СУБД, применение патчей и так далее.
-
Доступ из Data Transfer — включите эту опцию, чтобы разрешить доступ к кластеру из сервиса Yandex Data Transfer в Serverless-режиме.
Это позволит через специальную сеть подключаться к Yandex Data Transfer, запущенному в Kubernetes. В результате будут быстрее выполняться, например, запуск и деактивация трансфера.
-
Защита от удаления — управляет защитой кластера от непреднамеренного удаления пользователем.
Включенная защита от удаления кластера не помешает подключиться к нему вручную и удалить данные.
-
-
При необходимости задайте настройки Apache Kafka®.
-
Нажмите кнопку Создать кластер.
-
Дождитесь, когда кластер будет готов к работе: его статус на панели Managed Service for Apache Kafka® сменится на Running, а состояние — на Alive. Это может занять некоторое время.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Посмотрите описание команды CLI для создания кластера:
yc managed-kafka cluster create --help
-
Укажите параметры кластера в команде создания (в примере приведены не все параметры):
yc managed-kafka cluster create \ --name <имя кластера> \ --environment <окружение: prestable или production> \ --version <версия Apache Kafka®: 2.8, 3.0, 3.1 или 3.2> \ --network-name <имя сети> \ --brokers-count <количество брокеров в зоне> \ --resource-preset <класс хоста> \ --disk-type <network-hdd | network-ssd | local-ssd | network-ssd-nonreplicated> \ --disk-size <размер хранилища в гигабайтах> \ --assign-public-ip <публичный доступ> \ --security-group-ids <список идентификаторов групп безопасности> \ --deletion-protection=<защита от удаления кластера: true или false>
Совет
При необходимости здесь же можно задать настройки Apache Kafka®.
Включенная защита от удаления кластера не помешает подключиться к нему вручную и удалить данные.
-
Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров), передайте нужное значение в параметре
--maintenance-window
при создании кластера:yc managed-kafka cluster create \ ... --maintenance-window type=<тип технического обслуживания: anytime или weekly>,` `day=<день недели для типа weekly>,` `hour=<час дня для типа weekly>
Где:
type
— тип технического обслуживания:anytime
— в любое время.weekly
— по расписанию.
day
— день недели для типаweekly
в форматеDDD
. Например,MON
.hour
— час дня по UTC для типаweekly
в форматеHH
. Например,21
.
-
Чтобы управлять топиками через Admin API Apache Kafka®:
-
Задайте значение
true
для параметра--unmanaged-topics
при создании кластера:yc managed-kafka cluster create \ ... --unmanaged-topics true
Эту настройку невозможно изменить после создания кластера.
-
После создания кластера создайте пользователя-администратора.
-
-
Чтобы разрешить доступ к кластеру из сервиса Yandex Data Transfer в Serverless-режиме, передайте параметр
--datatransfer-access
.Это позволит через специальную сеть подключаться к Yandex Data Transfer, запущенному в Kubernetes. В результате будут быстрее выполняться, например, запуск и деактивация трансфера.
-
Чтобы создать кластер, размещенный на группах выделенных хостов, укажите через запятую их идентификаторы в параметре
--host-group-ids
при создании кластера:yc managed-kafka cluster create \ ... --host-group-ids <идентификаторы групп выделенных хостов>
Внимание
Эту настройку нельзя изменить после создания кластера. Использование выделенных хостов существенно влияет на тарификацию кластера.
Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). Terraform и его провайдеры распространяются под лицензией Mozilla Public License.
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.
При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
Если у вас еще нет Terraform, установите его и настройте провайдер.
Чтобы создать кластер:
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
-
Кластер Apache Kafka® — описание кластера и его хостов. При необходимости здесь же можно задать настройки Apache Kafka®.
-
Сеть — описание облачной сети, в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
-
Подсети — описание подсетей, к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.
Пример структуры конфигурационного файла:
terraform { required_providers { yandex = { source = "yandex-cloud/yandex" } } } provider "yandex" { token = "<OAuth или статический ключ сервисного аккаунта>" cloud_id = "<идентификатор облака>" folder_id = "<идентификатор каталога>" zone = "<зона доступности>" } resource "yandex_mdb_kafka_cluster" "<имя кластера>" { environment = "<окружение: PRESTABLE или PRODUCTION>" name = "<имя кластера>" network_id = "<идентификатор сети>" security_group_ids = ["<список идентификаторов групп безопасности кластера>"] deletion_protection = <защита от удаления кластера: true или false> config { assign_public_ip = "<публичный доступ к кластеру: true или false>" brokers_count = <количество брокеров> version = "<версия Apache Kafka®: 2.8, 3.0, 3.1 или 3.2>" schema_registry = "<управление схемами данных: true или false>" kafka { resources { disk_size = <размер хранилища в гигабайтах> disk_type_id = "<тип диска>" resource_preset_id = "<класс хоста>" } } zones = [ "<зоны доступности>" ] } } resource "yandex_vpc_network" "<имя сети>" { name = "<имя сети>" } resource "yandex_vpc_subnet" "<имя подсети>" { name = "<имя подсети>" zone = "<зона доступности>" network_id = "<идентификатор сети>" v4_cidr_blocks = ["<диапазон>"] }
Включенная защита от удаления кластера не помешает подключиться к нему вручную и удалить данные.
Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров), добавьте к описанию кластера блок
maintenance_window
:resource "yandex_mdb_kafka_cluster" "<имя кластера>" { ... maintenance_window { type = <тип технического обслуживания: ANYTIME или WEEKLY> day = <день недели для типа WEEKLY> hour = <час дня для типа WEEKLY> } ... }
Где:
type
— тип технического обслуживания:ANYTIME
— в любое время.WEEKLY
— по расписанию.
day
— день недели для типаWEEKLY
в форматеDDD
. Например,MON
.hour
— час дня по UTC для типаWEEKLY
в форматеHH
. Например,21
.
-
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Создайте кластер.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
После этого в указанном каталоге будут созданы все требуемые ресурсы, а в терминале отобразятся IP-адреса виртуальных машин. Проверить появление ресурсов и их настройки можно в консоли управления.
-
Подробнее см. в документации провайдера Terraform.
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение всех операций с кластером Managed Service for Apache Kafka® 60 минутами.
Операции, длящиеся дольше указанного времени, прерываются.
Добавьте к описанию кластера блок timeouts
, например:
resource "yandex_mdb_kafka_cluster" "<имя кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
Воспользуйтесь методом API create и передайте в запросе:
-
Идентификатор каталога, в котором должен быть размещен кластер, в параметре
folderId
. -
Имя кластера в параметре
name
.- Идентификаторы групп безопасности в параметре
securityGroupIds
.
- Идентификаторы групп безопасности в параметре
-
Настройки времени технического обслуживания (в т. ч. для выключенных кластеров) в параметре
maintenanceWindow
. -
Настройки защиты от удаления кластера в параметре
deletionProtection
.Включенная защита от удаления кластера не помешает подключиться к нему вручную и удалить данные.
Чтобы управлять топиками через Admin API Apache Kafka®:
- Передайте значение
true
для параметраunmanagedTopics
. Эту настройку невозможно изменить после создания кластера. - После создания кластера создайте пользователя-администратора.
Чтобы управлять схемами данных с помощью Managed Schema Registry, передайте значение true
для параметра configSpec.schemaRegistry
. Эту настройку невозможно изменить после создания кластера.
Чтобы разрешить доступ к кластеру из сервиса Yandex Data Transfer в Serverless-режиме, передайте значение true
для параметра configSpec.access.dataTransfer
.
Это позволит через специальную сеть подключаться к Yandex Data Transfer, запущенному в Kubernetes. В результате будут быстрее выполняться, например, запуск и деактивация трансфера.
Чтобы создать кластер, размещенный на группах выделенных хостов, передайте список их идентификаторов в параметре hostGroupIds
.
Внимание
Эту настройку нельзя изменить после создания кластера. Использование выделенных хостов существенно влияет на тарификацию кластера.
Важно
Если вы указали идентификаторы групп безопасности при создании кластера, то для подключения к нему может потребоваться дополнительная настройка групп безопасности.
Примеры
Создание кластера с одним хостом
Создайте кластер Managed Service for Apache Kafka® с тестовыми характеристиками:
- С именем
mykf
. - В окружении
production
. - С Apache Kafka® версии
3.2
. - В сети
default
. - В группе безопасности
enp6saqnq4ie244g67sb
. - С одним хостом класса
s2.micro
, в зоне доступностиru-central1-a
. - С одним брокером.
- С хранилищем на сетевых SSD-дисках (
network-ssd
) объемом 10 ГБ. - С публичным доступом.
- С защитой от случайного удаления кластера.
Выполните следующую команду:
yc managed-kafka cluster create \
--name mykf \
--environment production \
--version 3.2 \
--network-name default \
--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 enp6saqnq4ie244g67sb \
--deletion-protection=true
Создайте кластер Managed Service for Apache Kafka® с тестовыми характеристиками:
- В облаке с идентификатором
b1gq90dgh25bebiu75o
. - В каталоге с идентификатором
b1gia87mbaomkfvsleds
. - С именем
mykf
. - В окружении
PRODUCTION
. - С Apache Kafka® версии
3.2
. - В новой сети
mynet
с подсетьюmysubnet
.- В новой группе безопасности
mykf-sg
, разрешающей подключение к кластеру из интернета по порту9091
.
- В новой группе безопасности
- С одним хостом класса
s2.micro
, в зоне доступностиru-central1-a
. - С одним брокером.
- С хранилищем на сетевых SSD-дисках (
network-ssd
) объемом 10 ГБ. - С публичным доступом.
- С защитой от случайного удаления кластера.
Конфигурационный файл для такого кластера выглядит так:
terraform {
required_providers {
yandex = {
source = "yandex-cloud/yandex"
}
}
}
provider "yandex" {
token = "<OAuth или статический ключ сервисного аккаунта>"
cloud_id = "b1gq90dgh25bebiu75o"
folder_id = "b1gia87mbaomkfvsleds"
zone = "ru-central1-a"
}
resource "yandex_mdb_kafka_cluster" "mykf" {
environment = "PRODUCTION"
name = "mykf"
network_id = yandex_vpc_network.mynet.id
security_group_ids = [ yandex_vpc_security_group.mykf-sg.id ]
deletion_protection = true
config {
assign_public_ip = true
brokers_count = 1
version = "3.2"
kafka {
resources {
disk_size = 10
disk_type_id = "network-ssd"
resource_preset_id = "s2.micro"
}
}
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" ]
}
}