From ff8c1af855b6f08b9836e508db2b683eb1a41a68 Mon Sep 17 00:00:00 2001 From: Yana Ishkhanova Date: Tue, 7 Apr 2026 11:35:23 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=81=D1=82=D0=B0=D1=82=D1=8C=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D0=BA=D0=B0=D1=84=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/PaaS/Apache-Kafka/about-service.md | 86 +++++++ src/PaaS/Apache-Kafka/base-tier-connection.md | 215 ++++++++++++++++++ .../Apache-Kafka/base-tier-topics-guide.md | 64 ++++++ .../Apache-Kafka/cluster-configuretion.md | 111 +++++++++ src/PaaS/Apache-Kafka/full-tier-connection.md | 128 +++++++++++ 5 files changed, 604 insertions(+) create mode 100644 src/PaaS/Apache-Kafka/about-service.md create mode 100644 src/PaaS/Apache-Kafka/base-tier-connection.md create mode 100644 src/PaaS/Apache-Kafka/base-tier-topics-guide.md create mode 100644 src/PaaS/Apache-Kafka/cluster-configuretion.md create mode 100644 src/PaaS/Apache-Kafka/full-tier-connection.md diff --git a/src/PaaS/Apache-Kafka/about-service.md b/src/PaaS/Apache-Kafka/about-service.md new file mode 100644 index 0000000..985b0f9 --- /dev/null +++ b/src/PaaS/Apache-Kafka/about-service.md @@ -0,0 +1,86 @@ +# О сервисе + +## Назначение сервиса + +Данный сервис предназначен для команд, которым требуется надёжный и масштабируемый конвейер данных без необходимости самостоятельно разворачивать и обслуживать инфраструктуру Kafka. + +**Apache Kafka** - это распределённая система для потоковой передачи данных в реальном времени. Сервис обеспечивает надёжную и масштабируемую доставку сообщений между компонентами приложений, гарантируя отказоустойчивость и высокую производительность. + +В архитектуре современных информационных систем Kafka выполняет роль централизованного конвейера данных: одни сервисы (продюсеры) публикуют сообщения, а другие (консьюмеры) получают эти сообщения по мере необходимости. + +## Основные понятия + +### Продюсер (Producer) + +Программный компонент, который отправляет данные в Kafka. Продюсером может выступать любой сервис, генерирующий события: модуль приложения, система логирования, датчик IoT-устройства. + +### Консьюмер (Consumer) + +Программный компонент, который получает данные из Kafka. Консьюмер подписывается на интересующие его события и обрабатывает поступающие сообщения. + +### Топик (Topic) + +Именованный канал для хранения сообщений определённого типа. Топики организуют потоки данных по смыслу: например, "заказы", "ошибки", "события авторизации". Консьюмеры подписываются на один или несколько топиков для получения релевантных данных. + +### Партиция (Partition) + +Каждый топик разделяется на партиции - логические сегменты, распределяемые между серверами кластера. Партиции обеспечивают параллельную обработку данных: различные части одного топика могут обрабатываться одновременно несколькими консьюмерами. + +### Репликация (Replication) + +Для обеспечения отказоустойчивости партиции копируются на несколько серверов (брокеров). При выходе одного сервера из строя данные остаются доступными на других узлах кластера. + +### Микросервисная архитектура + +Kafka является стандартным решением для организации связи между микросервисами. В такой архитектуре сервисы обмениваются событиями асинхронно, что повышает надёжность и масштабируемость системы в целом. + +## Преимущества управляемого сервиса + +### Администрирование + +Клиенту не требуется самостоятельно разворачивать и обслуживать кластер Kafka. Мы берём на себя управление инфраструктурой, обновление версий, масштабирование и поддержку работоспособности. + +### Мониторинг + +Предоставляются готовые дашборды в Grafana с визуализацией ключевых метрик: + +- состояние брокеров; +- нагрузка на кластер; +- настроенная система оповещений о критических событиях; +- заполнение дискового пространства. +### Безопасность + +Поддерживается шифрованное подключение к кластеру с использованием SSL/TLS-сертификатов, что гарантирует защиту данных при передаче. +### Экспертная поддержка + +Мы обладаем практическим опытом администрирования более 500 кластеров Kafka. Накопленная экспертиза позволяет обеспечивать стабильность работы, своевременно выявлять и устранять потенциальные проблемы, оптимизировать конфигурации под конкретные задачи. +## Тарифные планы + +### Base + +Тарифный план для тех, кто имеет собственную экспертизу в работе с Kafka и желает самостоятельно управлять объектами верхнего уровня. + +**Обязательства провайдера:** +- поддержка инсталляции кластера; +- своевременное обновление версий Kafka; +- расширение вычислительных ресурсов кластера по запросу клиента. + +**Возможности:** +- **Управление учетными записями и правами доступа** - создание пользователей и настройка их прав для работы с Kafka; +- **Администрирование топиков** - полный цикл управления: создание, конфигурирование, настройка параметров и удаление; +- **Управление консьюмер-группами (Consumer Groups)** - возможность создавать, изменять и удалять логические объединения консьюмеров, которые совместно читают сообщения из топиков. Это обеспечивает высокую производительность и отказоустойчивость при обработке данных; +- **Работа с transactional ID** - полный цикл управления транзакционными идентификаторами (создание, изменение, удаление). Транзакционный идентификатор присваивается продюсеру Kafka для обеспечения атомарности операций: запись нескольких сообщений или коммит оффсетов выполняются по принципу "всё или ничего", а также предотвращается появление "зомби-продюсеров" при перезапусках. + +Инфраструктурное ядро кластера (брокеры, репликация, отказоустойчивость) остаётся под управлением провайдера. + +### Full + +Тарифный план для тех, кто предпочитает полностью делегировать задачи по администрированию Kafka. + +**Обязательства провайдера:** +- полное управление кластером; +- администрирование топиков; +- управление консьюмер-группами; +- работа с transactional id. + +Kafka используется как готовый сервис, не вовлекаясь в вопросы настройки и обслуживания. \ No newline at end of file diff --git a/src/PaaS/Apache-Kafka/base-tier-connection.md b/src/PaaS/Apache-Kafka/base-tier-connection.md new file mode 100644 index 0000000..a9b1720 --- /dev/null +++ b/src/PaaS/Apache-Kafka/base-tier-connection.md @@ -0,0 +1,215 @@ +# Подключение и работа с кластером Kafka (тариф Base) + +## О разделе + +В данном разделе описаны способы подключения к управляемому кластеру Kafka при тарифе Base. Рассматриваются два варианта: незашифрованное подключение (SASL_PLAINTEXT) и зашифрованное подключение с использованием SSL-сертификатов (SASL_SSL). Также приведены примеры работы с клиентскими утилитами и базовые операции администрирования. + +## Предварительные требования + +Для работы с кластером Kafka необходимо наличие следующих компонентов: +1. **Установленный клиент Kafka** - скачивается дистрибутив Kafka (например, kafka_2.13-4.2.0) и распаковывается в удобную директорию; +2. **Установленная Java** - для работы с Kafka требуется среда выполнения Java. Установка выполняется командой: **sudo apt install openjdk-17-jre-headless**. Рекомендуется использовать версию OpenJDK 17 или выше; +3. **Доступ к брокерам** - адреса брокеров (bootstrap servers) предоставляются после развертывания кластера; +4. **Учетные данные**: Вам передаются credentials пользователя "client", у которого есть возможность управления кластером. + - Имя пользователя (username) - стандартное значение client; + - Пароль - предоставляется после развертывания кластера. +5. **Корневой сертификат (для SSL-подключения)** - сертификат для зашифрованного подключения предоставляется файлом при заказе сервиса Kafka. + +## Структура клиентского дистрибутива  + +После распаковки архива Kafka в директории bin доступны основные скрипты для управления: + +|Скрипт|Назначение| +|---|---| +|**kafka-topics.sh**|Управление топиками (создание, удаление, просмотр)| +|**kafka-console-producer.sh**|Отправка сообщений в топик| +|**kafka-console-consumer.sh**|Чтение сообщений из топика| +|**kafka-consumer-groups.sh**|Управление консьюмер-группами| +|**kafka-configs.sh**|Изменение конфигурации топиков и других объектов| +|**kafka-acls.sh**|Управление списками доступа (ACL)| +В разделе ниже приведены примеры использования скриптов. + +Подробное описание операций с данными и другими скриптами приведено в [официальной документации Kafka](https://kafka.apache.org/42/operations/basic-kafka-operations/). Дополнительную информацию можно получить, выполнив любой скрипт с флагом --help: + +``` +./kafka-topics.sh --help +``` +## Конфигурационные файлы клиента + +Для подключения к Kafka используется файл настроек (client.properties), который содержит параметры аутентификации и протокола. + +### Незашифрованное подключение (SASL_PLAINTEXT) + +Создается файл **client.properties** со следующим содержимым: + +``` +sasl.mechanism=SCRAM-SHA-512 +security.protocol=SASLPLAINTEXT +sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \ +    username="client" \ +    password="вашпароль"; +``` + +### Зашифрованное подключение (SASL_SSL) + +Для зашифрованного подключения дополнительно требуется корневой сертификат и хранилище доверенных сертификатов (truststore). + +#### Шаг 1. Создание truststore + +С помощью утилиты **keytool** выполняется импорт сертификата в хранилище: + +``` +keytool -importcert -storetype PKCS12 -keystore /путь/к/трастстору/truststore.jks -alias myalias -file ca.crt -storepass _любойвашпароль -keypass любойвашпароль_ +``` + +**Параметры:** +- **keystore** - путь к создаваемому хранилищу; +- **alias** - псевдоним сертификата в хранилище; +- **file** - путь к загруженному корневому сертификату; +- **storepass** - пароль для доступа к хранилищу; +- **keypass** - пароль для доступа к ключу. + +#### Шаг 2. Настройка client.properties + +В файл **client.properties** добавляются параметры SSL: + +``` +sasl.mechanism=SCRAM-SHA-512 +security.protocol=SASLSSL +sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \ +    username="client" \ +    password="вашпароль"; +ssl.truststore.location=/путь/к/трастстору/truststore.jks +ssl.truststore.password=парольотхранилища +``` + +## Примеры подключения + +Для незашифрованного подключения (SASL_PLAINTEXT) используется порт 9091; + +Для зашифрованного подключения (SASL_SSL) используется порт 9092. + +### Создание топиков  + +``` +./kafka-topics.sh --bootstrap-server :9092,:9092,:9092 --command-config ../config/client.properties --create --topic <имя топика> --partitions <количество партиций> --replication-factor <значение> --config min.insync.replicas=<значение> +``` + +Ознакомиться с рекомендациями по настройке топиков можно здесь - [рекомендации](https://confluence.datafort.ru/spaces/OVPS/pages/2557741/%D0%A0%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8+%D0%BF%D0%BE+%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B5+%D1%82%D0%BE%D0%BF%D0%B8%D0%BA%D0%B0+%D1%82%D0%B0%D1%80%D0%B8%D1%84+Base). + +По умолчанию топик создаётся с `--partitions 10 --replication-factor 3 --config min.insync.replicas=2`, поэтому, если нет необходимости создавать топик со специфическими настройками, эти флаги в команде можно не указывать. + +### Просмотр списка топиков + +Выполняется команда с указанием брокеров и файла конфигурации: + +``` +./kafka-topics.sh --bootstrap-server :9092,:9092,:9092 --command-config ~/client.properties --list +``` + +**Параметры:** +- **bootstrap-server** - список брокеров кластера (адреса и порты); +- **command-config** - путь к файлу с настройками клиента; +- **list** - вывод списка топиков. + +### Отправка сообщения в топик + +Выполняется команда с указанием брокеров, файла конфигурации и топика: + +``` +./kafka-console-producer.sh --bootstrap-server :9092,:9092,:9092 --command-config~/client.properties --topic test-topic +``` + +После выполнения команды сообщения вводятся построчно. Для завершения используется сочетание клавиш Ctrl+C. + +### Чтение сообщений из топика + +Выполняется команда с указанием топика и, при необходимости, consumer group: + +``` +./kafka-console-consumer.sh --bootstrap-server :9092,:9092,:9092 --command-config~/client.properties --topic test-topic --from-beginning --group my-new-consumer-group +``` + +**Параметры:** +- **from-beginning** - чтение всех сообщений с начала (при отсутствии параметра чтение начинается с новых сообщений); +- **group -** название consumer group, которая создастся автоматически. +## Управление пользователями и доступом + +### Создание пользователей + +Для удобства можно написать скрипт, который создает пользователя сразу для двух методов шифрования - SHA-256 и SHA-512: + +``` +#!/bin/bash +username="имя_пользователя" +password="сгенерированный_пароль" +bootstrap=":9092,:9092,:9092" + +/opt/kafka/bin/kafka-configs.sh \ +          --bootstrap-server $bootstrap \ +          --alter \ +          --add-config SCRAM-SHA-256=[password="$password"] \ +          --command-config /opt/kafka/config/client.properties \ +          --entity-type users \ +          --entity-name $username + +/opt/kafka/bin/kafka-configs.sh \ +          --bootstrap-server $bootstrap \ +          --alter \ +          --add-config SCRAM-SHA-512=[password="$password"] \ +          --command-config /opt/kafka/config/client.properties \ +          --entity-type users \ +          --entity-name $username +``` + +**Запуск скрипта:** + +``` +sudo ./kafka-user-add.sh +``` + +### Просмотр данных о пользователе + +Для просмотра информации о существующих пользователях выполняется команда: + +``` +sudo ./kafka-console-consumer.sh --bootstrap-server :9092 --describe --command-config ../config/client.properties --entity-type users +``` + +### Управление consumer groups + +Consumer Group создается автоматически при обращении к ней. Например, при чтении сообщений из топика с указанием этой consumer group: + +``` +sudo ./kafka-console-consumer.sh --bootstrap-server :9092 --command-config ../config/client.properties --topic test-topic --group test-group --from-beginning +``` + +### Просмотр списка ACL + +Действия с ACL из командной строки осуществляются скриптом kafka-acls.sh. Пример просмотра списка ACL: + +``` +sudo ./kafka-acls.sh --bootstrap-server :9092,:9092,:9092 --command-config ../config/client.properties --list +``` + +## Администрирование кластера + +### Изменение объема RAM + +Для изменения объема оперативной памяти, выделенной под Kafka, направляется обращение в техническую поддержку с указанием требуемого объема RAM. + +### Изменение количества брокеров + +Выполняется также через обращение в техническую поддержку. + +Брокеров в кластере рекомендуется поддерживать **нечетным** для корректной работы механизмов выборов лидера. + +После добавления брокера выполняется перераспределение существующих партиций с учетом нового узла с помощью утилиты **kafka-reassign-partitions.sh**: + +``` +./kafka-reassign-partitions.sh --bootstrap-server <адреса_брокеров> --generate --topics-to-move-json-file topics.json --broker-list "0,1,2" --execute +``` + +: : : warning +Операция перераспределения партиций требует времени и может создавать дополнительную нагрузку на кластер. Выполнение рекомендуется в период наименьшей активности. +: : : \ No newline at end of file diff --git a/src/PaaS/Apache-Kafka/base-tier-topics-guide.md b/src/PaaS/Apache-Kafka/base-tier-topics-guide.md new file mode 100644 index 0000000..315cd58 --- /dev/null +++ b/src/PaaS/Apache-Kafka/base-tier-topics-guide.md @@ -0,0 +1,64 @@ +# Рекомендации по настройке топика (тариф Base) + +## О разделе + +При настройке топиков в Kafka важно учитывать несколько ключевых параметров для оптимальной работы системы. В данном разделе рассматриваются основные настройки, которые помогут правильно настроить топик. +## Базовые параметры топика + +### Имя топика + +При задании имени топика необходимо соблюдать следующие правила: + +**Допустимые символы:** +- имя должно начинаться с буквы (латиница), цифры или подчеркивания ( _ ); +- далее могут использоваться буквы, цифры, точки ( . ), дефисы ( - ) и подчеркивания; +- длина имени - от 3 до 200 символов; +- следует учитывать, что имя топика не подлежит изменению после создания. + +: : : tip +Избегайте использования имен, отличающихся только точкой и подчеркиванием (например, topic_1 и topic.1), так как Kafka не различает такие названия +: : : + +: : : tip +Не используйте имена, начинающиеся с двойного подчеркивания ( __ ), например, **__consumer_offsets**. Эти имена зарезервированы для внутренних топиков Kafka. +: : : +### Количество партиций (partitions) + +Партиции определяют степень параллелизма при обработке данных. Количество партиций выбирается исходя из требуемой пропускной способности. + +**Основные правила:** +- количество партиций можно **только увеличивать** (уменьшить нельзя). Это следует учитывать при планировании; +- если в кластере несколько брокеров, желательно, чтобы количество партиций было кратно количеству брокеров - это способствует равномерному распределению данных; +- рекомендуется отслеживать отставание потребителей (consumer lag) и при необходимости увеличивать количество партиций. + +**Расчет количества партиций:** +Количество партиций определяется по формуле: + +``` +Partitions = max(NP, NC) +``` +где: +- NP = TT / TP - количество необходимых продюсеров; +- NC = TT / TC - количество необходимых консьюмеров; +- TT - общая ожидаемая пропускная способность системы; +- TP - максимальная пропускная способность одного продюсера для одной партиции; +- TC - максимальная пропускная способность одного консьюмера для одной партиции. +### Фактор репликации (replication-factor) + +Фактор репликации определяет количество копий данных, хранящихся на разных брокерах. + +: : : tip +Для production-сред настоятельно рекомендуется устанавливать значение 3. Это означает, что у каждой партиции будет один лидер и две реплики, что обеспечивает отказоустойчивость при выходе из строя одного брокера. +: : : +## Ключевые параметры конфигурации +### min.insync.replicas (минимальное количество синхронизированных реплик) + +Параметр работает в связке с настройкой продюсера acks=all. Определяет, сколько реплик (включая лидера) должны подтвердить запись, чтобы она считалась успешной. + +При факторе репликации = 3 рекомендуется установить значение **2**. Это обеспечивает: +- надежность: данные записаны минимум на два брокера; +- доступность: при отказе одного брокера запись продолжается. + +: : : tip +Не рекомендуется устанавливать значение равным фактору репликации (например, 3). В этом случае при перезагрузке одного брокера запись в топик станет невозможной, так как для подтверждения потребуется подтверждение от всех трех реплик. +: : : diff --git a/src/PaaS/Apache-Kafka/cluster-configuretion.md b/src/PaaS/Apache-Kafka/cluster-configuretion.md new file mode 100644 index 0000000..7da9bdf --- /dev/null +++ b/src/PaaS/Apache-Kafka/cluster-configuretion.md @@ -0,0 +1,111 @@ +# Конфигурация кластера + +## О разделе + +Данный раздел описывает технические параметры кластера Kafka и порядок их первичной конфигурации. + +Настройка указанных параметров выполняется администратором облачного провайдера на этапе развертывания сервиса. Пользователь не имеет прямого доступа к их самостоятельной установке. + +Перед созданием кластера клиент предоставляет перечень требуемых параметров менеджеру. Администратор облачного провайдера выполняет конфигурацию в соответствии с согласованными требованиями. + +## Выбор типа и размера дискового хранилища + +Производительность брокера сообщений напрямую зависит от скорости, с которой он может читать и записывать данные на диск. При заказе кластера необходимо выбрать тип дискового хранилища, который определит максимальную скорость работы (IOPS) и время отклика. + +**IOPS**- количество операций чтения или записи, которые диск может выполнить за секунду. Чем выше этот показатель, тем быстрее брокер сообщений обрабатывает запросы. + +: : : info +Каждые 15 IOPS обеспечивают примерно 1 мегабит в секунду (Мбит/с) скорости чтения или записи при размере блока данных 64 КБ. +: : : + +### Доступные типы хранилищ: + +|Название|Лимит IOPS| +|---|---| +|**Fast SAS**|до 2 IOPS на 1 ГБ| +|**SSD**|до 5 IOPS на 1 ГБ| +|**Fast SSD**|до 10 IOPS на 1 ГБ| +|**Ultra NVMe**|до 25 IOPS на 1 ГБ| + +: : : info +После выбора типа диска необходимо указать объем дискового хранилища, который будет выделен под данные кластера Kafka. Минимальный объем зависит от выбранного типа хранилища +: : : + +## Конфигурация вычислительных ресурсов + +В данном разделе определяются вычислительные мощности кластера: процессорные ресурсы, оперативная память и количество серверов (нод), из которых будет состоять кластер Kafka. + +### Количество нод в кластере + +Количество нод определяет отказоустойчивость кластера и возможность распределять запросы на чтение между репликами. Чем больше нод, тем выше надежность и производительность чтения. Количество нод выбирается в диапазоне от 3 до 14. + +### Процессор (CPU) + +Процессор - это вычислительная мощность, которая выделяется каждой ноде кластера. Количество vCPU определяет, насколько быстро брокер сообщений сможет обрабатывать запросы, выполнять сложные операции (сортировки, объединения таблиц) и обслуживать одновременные подключения. Доступный диапазон выбора процессора: от 2 шт до 24 шт. + +### Оперативная память (RAM) + +Оперативная память - один из ключевых ресурсов для производительности. Данные, помещающиеся в RAM, обрабатываются максимально быстро, без обращения к диску. Доступный диапазон выбора оперативной памяти: от 4 ГБ до 768 ГБ. + +## Интернет + +При заказе сервиса можно выбрать пропускную способность канала связи, через который будет осуществляться доступ к кластеру Kafka из сети интернет. + +**Доступные варианты скорости:** + +- 50 Мбит/с; +- 100 Мбит/с; +- 200 Мбит/с; +- 300 Мбит/с; +- 400 Мбит/с; +- 500 Мбит/с; +- 1000 Мбит/с (1 Гбит/с). + +: : : info +Для выбранного канала предоставляется публичный IP-адрес. +: : : +## Сетевой доступ к кластеру + +Для организации защищенного подключения к кластеру Kafka доступны стандартные механизмы, используемые во всех сервисах платформы: + +- **IPsec-подключение** - организация защищенного туннеля между инфраструктурой и кластером Kafka. Подробнее см. раздел IPSEC; +- **Interconnect** - прямое сетевое соединение между сервисами внутри платформы без выхода в интернет. Подробнее см. раздел Interconnect. + +Для построения Interconnect-соединения требуется сначала заказать PaaS-сервис и дождаться его предоставления, после чего отдельно заказать Interconnect через менеджера. + +Выбор конкретного способа подключения зависит от архитектуры приложений и требований к безопасности. + +# Калькулятор + +Для облегчения расчета параметров кластера Kafka разработан специализированный калькулятор - простое одностраничное приложение. В калькулятор вносятся исходные данные о планируемой нагрузке, после чего по нажатию кнопки **Получить** производится автоматический расчет конфигурации кластера. + +Все поля обязательны для заполнения. Формы можно удалять, добавлять и дублировать ранее заполненные, что позволяет гибко настраивать параметры под различные сценарии использования. + +## Параметры топиков + +|Параметр|Описание| +|---|---| +|**Имя топика**|Уникальное наименование топика в рамках кластера. Поле обязательное. Используется для идентификации топика при расчетах.| +|**Число партиций**|Количество партиций, на которые будет разбит топик. Значение должно быть больше числа консьюмеров.| +|**Фактор репликации**|Количество копий данных, хранящихся на разных брокерах. Для продуктивных кластеров рекомендуется значение не менее 3.
**Примечание:** Количество узлов кластера формируется на основании параметра фактора репликации. Рекомендуется выбирать нечетное количество узлов для корректной работы механизмов выборов лидера.| +|**Средний размер сообщения**|Средний объем одного сообщения, передаваемого через топик.| +|**Максимальный размер сообщения**|Максимальный объем одного сообщения. Используется для расчета пиковых нагрузок.| +|**Частота сообщений**|Количество сообщений, отправляемых в топик за единицу времени.| +|**Срок хранения сообщения**|Период времени, в течение которого сообщения хранятся в топике после записи. По истечении этого срока данные удаляются.| +|**Имя продюсера**|Наименование приложения-отправителя (для идентификации в расчетах)| +|**Количество экземпляров продюсера**|Число одновременно работающих экземпляров продюсера.| +|**Имя консьюмера**|Наименование приложения-получателя (для идентификации в расчетах).| +|**Количество экземпляров консьюмера**|Число одновременно работающих экземпляров консьюмера.
**Примечание:** Формы продюсеров и консьюмеров можно добавлять, удалять и дублировать. Это позволяет учитывать множественные источники и приемники данных в рамках одного расчета.| + +## Расчет конфигурации кластера + +После заполнения всех полей нажимается кнопка **Получить**. Все расчеты выполняются в соответствии с планированием ресурсов, указанных в официальной документации Apache Kafka. +В результате, рассчитанные параметры служат основой для формирования заказа на управляемый сервис Kafka. + +Калькулятор автоматически производит расчет следующих параметров: + +- **Количество узлов** - формируется на основании параметра фактора репликации (replication.factor). Рекомендуется выбирать нечетное количество узлов для корректной работы механизмов выборов лидера; +- **vCPU** - вычисляется из планируемого количества входящих сообщений и масштабируется в зависимости от числа узлов: чем больше кластер, тем меньше требуется CPU на отдельный сервер благодаря распределению нагрузки; +- **RAM** - рассчитывается с учетом количества партиций, объема сообщений и числа подключений продюсеров и консьюмеров; +- **Тип и объем дискового хранилища** - определяется на основе среднего и максимального размера сообщения, частоты отправки, срока хранения и фактора репликации; +- **Параметры репликации** - учитывают заданный фактор репликации и обеспечивают отказоустойчивость кластера. \ No newline at end of file diff --git a/src/PaaS/Apache-Kafka/full-tier-connection.md b/src/PaaS/Apache-Kafka/full-tier-connection.md new file mode 100644 index 0000000..d2231d6 --- /dev/null +++ b/src/PaaS/Apache-Kafka/full-tier-connection.md @@ -0,0 +1,128 @@ +# Подключение и работа с кластером Kafka (тариф Full) + +## О разделе + +В данном разделе описаны способы подключения к управляемому кластеру Kafka при тарифе Full. Рассматриваются два варианта: незашифрованное подключение (SASL_PLAINTEXT) и зашифрованное подключение с использованием SSL-сертификатов (SASL_SSL). Также приведены примеры работы с клиентскими утилитами. + +## Предварительные требования + +Для работы с кластером Kafka необходимо наличие следующих компонентов: + +1. **Установленный клиент Kafka** - скачивается дистрибутив Kafka (например, kafka_2.13-4.2.0) и распаковывается в удобную директорию; +2. **Установленная Java** - для работы с Kafka требуется среда выполнения Java. Установка выполняется командой: **sudo apt install openjdk-17-jre-headless**. Рекомендуется использовать версию OpenJDK 17 или выше; +3. **Доступ к брокерам** - адреса брокеров (bootstrap servers) предоставляются после развертывания кластера; +4. **Учетные данные** - пользователи создаются по Вашему запросу. Например, с правами чтения топиков и записи в них. +5. **Корневой сертификат (для SSL-подключения)** - сертификат для зашифрованного подключения предоставляется файлом при заказе сервиса Kafka. + +## Структура клиентского дистрибутива  + +После распаковки архива Kafka в директории bin доступны скрипты, например: + +|Скрипт|Назначение| +|---|---| +|**kafka-console-producer.sh**|Отправка сообщений в топик| +|**kafka-console-consumer.sh**|Чтение сообщений из топика| + +В разделе ниже приведены примеры использования скриптов. +Подробное описание операций с данными и другими скриптами приведено в [официальной документации Kafka](https://kafka.apache.org/42/operations/basic-kafka-operations/). Дополнительную информацию можно получить, выполнив любой скрипт с флагом --help: + +``` +./kafka-console-producer.sh +``` + +## Конфигурационные файлы клиента + +Для подключения к Kafka используется файл настроек (client.properties), который содержит параметры аутентификации и протокола. + +### Незашифрованное подключение (SASL_PLAINTEXT) + +Создается файл **client.properties** со следующим содержимым: + +``` +sasl.mechanism=SCRAM-SHA-512 +security.protocol=SASLPLAINTEXT +sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \ +    username="вашлогин" \ +    password="вашпароль"; +``` + +### Зашифрованное подключение (SASL_SSL) + +Для зашифрованного подключения дополнительно требуется корневой сертификат и хранилище доверенных сертификатов (truststore). + +#### Шаг 1. Создание truststore + +С помощью утилиты **keytool** выполняется импорт сертификата в хранилище: + +``` +keytool -importcert -storetype PKCS12 -keystore /путь/к/трастстору/truststore.jks -alias myalias -file ca.crt -storepass _любойвашпароль -keypass любойвашпароль_ +``` + +**Параметры:** +- **keystore** - путь к создаваемому хранилищу; +- **alias** - псевдоним сертификата в хранилище; +- **file** - путь к загруженному корневому сертификату; +- **storepass** - пароль для доступа к хранилищу; +- **keypass** - пароль для доступа к ключу. + +#### Шаг 2. Настройка client.properties + +В файл **client.properties** добавляются параметры SSL: + +``` +sasl.mechanism=SCRAM-SHA-512 +security.protocol=SASLSSL +sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \ +    username="вашлогин" \ +    password="вашпароль"; +ssl.truststore.location=/путь/к/трастстору/truststore.jks +ssl.truststore.password=парольотхранилища +``` + +## Примеры подключения + +Для незашифрованного подключения (SASL_PLAINTEXT) используется порт 9091 +Для зашифрованного подключения (SASL_SSL) используется порт 9092 + +### Отправка сообщения в топик + +Выполняется команда с указанием брокеров, файла конфигурации и топика: + +``` +./kafka-console-producer.sh --bootstrap-server :9092,:9092,:9092 --command-config~/client.properties --topic test-topic +``` + +**Параметры:** + +- **bootstrap-server** - список брокеров кластера (адреса и порты); +- **command-config** - путь к файлу с настройками клиента. + +После выполнения команды сообщения вводятся построчно. Для завершения используется сочетание клавиш Ctrl+C. + +### Чтение сообщений из топика + +Выполняется команда с указанием топика и, при необходимости, consumer group: + +``` +./kafka-console-consumer.sh --bootstrap-server :9092,:9092,:9092 --command-config~/client.properties --topic test-topic --from-beginning --group my-new-consumer-group +``` + +**Параметры:** + +- **from-beginning** - чтение всех сообщений с начала (при отсутствии параметра чтение начинается с новых сообщений); +- **group -** название consumer group, которая при её указании создастся автоматически. + +## Администрирование кластера + +: : : info +Для изменения параметров кластера Kafka (CPU, RAM, DISK, количества брокеров, параметров топиков) необходимо направить запрос в Service Desk по адресу [servicedesk@datafort.ru](mailto:servicedesk@datafort.ru) с указанием требуемых значений. +: : : + +### Изменение количества брокеров + +Выполняется также через обращение в техническую поддержку. +Брокеров в кластере рекомендуется поддерживать **нечетным** для корректной работы механизмов выборов лидера. + +: : : info +Операция перераспределения партиций требует времени и может создавать дополнительную нагрузку на кластер. Выполнение рекомендуется в период наименьшей активности. +: : : \ No newline at end of file