Праавки по сервису kafka
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
# О сервисе
|
||||
## Назначение сервиса
|
||||
# Назначение сервиса
|
||||
|
||||
Данный сервис предназначен для команд, которым требуется надёжный и масштабируемый конвейер данных без необходимости самостоятельно разворачивать и обслуживать инфраструктуру Kafka.
|
||||
|
||||
@@ -34,6 +33,7 @@
|
||||
Kafka является стандартным решением для организации связи между микросервисами. В такой архитектуре сервисы обмениваются событиями асинхронно, что повышает надёжность и масштабируемость системы в целом.Преимущества управляемого сервиса
|
||||
|
||||
## Преимущества управляемого сервиса
|
||||
|
||||
### Администрирование
|
||||
|
||||
Клиенту не требуется самостоятельно разворачивать и обслуживать кластер Kafka. Мы берём на себя управление инфраструктурой, обновление версий, масштабирование и поддержку работоспособности.
|
||||
@@ -75,6 +75,7 @@ Kafka является стандартным решением для орган
|
||||
- **Работа с transactional ID** - полный цикл управления транзакционными идентификаторами (создание, изменение, удаление). Транзакционный идентификатор присваивается продюсеру Kafka для обеспечения атомарности операций: запись нескольких сообщений или коммит оффсетов выполняются по принципу «всё или ничего», а также предотвращается появление «зомби-продюсеров» при перезапусках.
|
||||
|
||||
Инфраструктурное ядро кластера (брокеры, репликация, отказоустойчивость) остаётся под управлением провайдера.
|
||||
|
||||
### Full
|
||||
|
||||
Тарифный план для тех, кто предпочитает полностью делегировать задачи по администрированию Kafka.
|
||||
|
||||
@@ -2,20 +2,24 @@
|
||||
|
||||
## О разделе
|
||||
|
||||
В данном разделе описаны способы подключения к управляемому кластеру Kafka. Рассматриваются два варианта: незашифрованное подключение (SASL_PLAINTEXT) и зашифрованное подключение с использованием SSL-сертификатов (SASL_SSL). Также приведены примеры работы с клиентскими утилитами и базовые операции администрирования.
|
||||
Раздел содержит описание способов подключения к управлению кластером Kafka. Поддерживаются два типа подключения:
|
||||
- `SASL_PLAINTEXT` - незашифрованное;
|
||||
- `SASL_SSL` - зашифрованное (через SSL-сертификат).
|
||||
|
||||
Также в разделе приведены примеры работы с клиентскими утилитами и базовые операции администрирования.
|
||||
|
||||
## Предварительные требования
|
||||
|
||||
Для работы с кластером Kafka необходимо наличие следующих компонентов:
|
||||
1. **Установленный клиент Kafka** - скачивается дистрибутив Kafka (например, kafka_2.13-4.2.0) и распаковывается в удобную директорию;
|
||||
2. **Установленная Java** - для работы с Kafka требуется среда выполнения Java. Установка выполняется командой: **sudo apt install openjdk-17-jre-headless**. Рекомендуется использовать версию OpenJDK 17 или выше;
|
||||
Для начала работы с кластером Kafka необходимо выполнить предварительную настройку:
|
||||
1. **Установить клиент Kafka** - скачивается дистрибутив Kafka (например, kafka_2.13-4.2.0) и распаковывается в удобную директорию;
|
||||
2. **Установить среду выполнения Java** - для работы необходимо установить среду выполнения, с помощью команды: `**sudo apt install openjdk-17-jre-headless**`. Рекомендуется использовать версию OpenJDK 17 или выше;
|
||||
3. **Доступ к брокерам** - адреса брокеров (bootstrap servers) предоставляются после развертывания кластера;
|
||||
4. **Учетные данные**:
|
||||
- Имя пользователя (username) - стандартное значение client;
|
||||
- Пароль - предоставляется после развертывания кластера.
|
||||
5. **Корневой сертификат (для SSL-подключения)** - сертификат для зашифрованного подключения предоставляется файлом при заказе сервиса Kafka.
|
||||
|
||||
## Структура клиентского дистрибутива
|
||||
## Структура клиентского дистрибутива
|
||||
|
||||
После распаковки архива Kafka в директории bin доступны основные скрипты для управления:
|
||||
|
||||
@@ -27,6 +31,7 @@
|
||||
| `kafka-consumer-groups.sh` | Управление консьюмер-группами |
|
||||
| `kafka-configs.sh` | Изменение конфигурации топиков и других объектов |
|
||||
| `kafka-acls.sh` | Управление списками доступа (ACL) |
|
||||
|
||||
В разделе ниже приведены примеры использования скриптов.
|
||||
|
||||
Подробное описание операций с данными и другими скриптами приведено в [официальной документации Kafka](https://kafka.apache.org/42/getting-started/introduction/). Дополнительную информацию можно получить, выполнив любой скрипт с флагом --help:
|
||||
@@ -35,10 +40,9 @@
|
||||
./kafka-topics.sh --help
|
||||
```
|
||||
|
||||
|
||||
### Конфигурационные файлы клиента
|
||||
|
||||
Для подключения к Kafka используется файл настроек (client.properties), который содержит параметры аутентификации, протокола и его механизмов (рекомендуются SCRAM_SHA_512 и SCRAM_SHA_256).
|
||||
Для подключения к Kafka используется файл настроек **client.properties**, который содержит параметры аутентификации, протокола и его механизмов (рекомендуются SCRAM_SHA_512 и SCRAM_SHA_256).
|
||||
|
||||
### Незашифрованное подключение (SASL_PLAINTEXT)
|
||||
|
||||
@@ -56,7 +60,7 @@ sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule require
|
||||
|
||||
Для зашифрованного подключения (в production-средах рекомендуется использовать именно его) дополнительно требуется корневой сертификат и хранилище доверенных сертификатов (truststore).
|
||||
|
||||
Шаг 1. Создание truststore
|
||||
#### Шаг 1. Создание truststore
|
||||
|
||||
С помощью утилиты **keytool** выполняется импорт сертификата в хранилище:
|
||||
|
||||
@@ -72,7 +76,7 @@ keytool -importcert -storetype PKCS12 -keystore /путь/к/трастстор
|
||||
- **storepass** - пароль для доступа к хранилищу;
|
||||
- **keypass** - пароль для доступа к ключу.
|
||||
|
||||
Шаг 2. Настройка client.properties
|
||||
#### Шаг 2. Настройка client.properties
|
||||
|
||||
В файл **client.properties** добавляются параметры SSL:
|
||||
|
||||
@@ -91,7 +95,7 @@ ssl.truststore.password=парольотхранилища
|
||||
Для незашифрованного подключения (SASL_PLAINTEXT) используется порт 9091;
|
||||
Для зашифрованного подключения (SASL_SSL) используется порт 9092.
|
||||
|
||||
### Создание топиков
|
||||
### Создание топиков
|
||||
|
||||
```
|
||||
./kafka-topics.sh --bootstrap-server <IP машины 0>:9092,<IP машины 1>:9092,<IP машины X>:9092 --command-config ../config/client.properties --create --topic <имя топика> --partitions <количество партиций> --replication-factor <значение> --config min.insync.replicas=<значение>
|
||||
@@ -139,7 +143,8 @@ command-config - путь к файлу с настройками клиент
|
||||
- **group** - название consumer group, которая создастся автоматически.
|
||||
|
||||
## Управление пользователями и доступом
|
||||
## Рекомендации к паролям
|
||||
|
||||
#### Рекомендации к паролям
|
||||
|
||||
**Длина пароля (рекомендуемая):**
|
||||
|
||||
@@ -213,6 +218,7 @@ sudo ./kafka-acls.sh --bootstrap-server <IP_брокера_0>:9092,<IP_брок
|
||||
```
|
||||
|
||||
## Администрирование кластера
|
||||
|
||||
### Изменение объема RAM
|
||||
|
||||
Для изменения объема оперативной памяти, выделенной под Kafka, направляется обращение в техническую поддержку с указанием требуемого объема RAM.
|
||||
@@ -229,10 +235,6 @@ sudo ./kafka-acls.sh --bootstrap-server <IP_брокера_0>:9092,<IP_брок
|
||||
./kafka-reassign-partitions.sh --bootstrap-server <адреса_брокеров> --generate --topics-to-move-json-file topics.json --broker-list "0,1,2" --execute
|
||||
```
|
||||
|
||||
: : : info
|
||||
::: info
|
||||
Операция перераспределения партиций требует времени и может создавать дополнительную нагрузку на кластер. Выполнение рекомендуется в период наименьшей активности.
|
||||
: : :
|
||||
|
||||
|
||||
|
||||
|
||||
:::
|
||||
|
||||
@@ -1,35 +1,41 @@
|
||||
# Рекомендации по настройке топика (тариф Base)
|
||||
# Настройка топика
|
||||
|
||||
## О разделе
|
||||
## Рекомендации по настройке топика (тариф Base)
|
||||
|
||||
В разделе описаны основные параметры топиков Apache Kafka, влияющие на производительность, отказоустойчивость и параллелизм обработки данных.
|
||||
|
||||
При настройке топиков в Kafka важно учитывать несколько ключевых параметров для оптимальной работы системы. В данном разделе рассматриваются основные настройки, которые помогут правильно настроить топик.
|
||||
## Базовые параметры топика
|
||||
|
||||
### Имя топика
|
||||
|
||||
При задании имени топика необходимо соблюдать следующие правила:
|
||||
При именовании топика применяются следующие правила:
|
||||
|
||||
**Допустимые символы:**
|
||||
- имя должно начинаться с буквы (латиница), цифры или подчеркивания ( _ );
|
||||
- далее могут использоваться буквы, цифры, точки ( . ), дефисы ( - ) и подчеркивания;
|
||||
- длина имени - от 3 до 200 символов;
|
||||
- следует учитывать, что имя топика не подлежит изменению после создания.
|
||||
- первый символ — буква (a–z, A–Z), цифра (0–9) или подчёркивание (_);
|
||||
- последующие символы — буквы, цифры, точки (.), дефисы (-) или подчёркивания;
|
||||
- длина имени — от 3 до 200 символов.
|
||||
|
||||
: : : tip
|
||||
**Ограничения:**
|
||||
- имя топика нельзя изменить после создания;
|
||||
- не рекомендуется использовать имена, различающиеся только точкой и подчёркиванием (например, `topic_1` и `topic.1`): Kafka не различает такие названия;
|
||||
- имена с двойным подчёркиванием в начале (например, `__consumer_offsets`) зарезервированы для внутренних топиков Kafka.
|
||||
|
||||
::: tip
|
||||
Избегайте использования имен, отличающихся только точкой и подчеркиванием (например, topic_1 и topic.1), так как Kafka не различает такие названия
|
||||
: : :
|
||||
:::
|
||||
|
||||
: : : tip
|
||||
::: tip
|
||||
Не используйте имена, начинающиеся с двойного подчеркивания (__), например, **__consumer_offsets**. Эти имена зарезервированы для внутренних топиков Kafka.
|
||||
: : :
|
||||
:::
|
||||
|
||||
### Количество партиций (partitions)
|
||||
|
||||
Партиции определяют степень параллелизма при обработке данных. Количество партиций выбирается исходя из требуемой пропускной способности.
|
||||
Партиции определяют уровень параллелизма при чтении и записи данных. Количество партиций выбирается исходя из требуемой пропускной способности.
|
||||
|
||||
**Основные правила:**
|
||||
- количество партиций можно **только увеличивать** (уменьшить нельзя). Это следует учитывать при планировании;
|
||||
- если в кластере несколько брокеров, желательно, чтобы количество партиций было кратно количеству брокеров - это способствует равномерному распределению данных;
|
||||
- рекомендуется отслеживать отставание потребителей (consumer lag) и при необходимости увеличивать количество партиций.
|
||||
**Правила:**
|
||||
- количество партиций можно только увеличивать (уменьшение невозможно);
|
||||
- при наличии нескольких брокеров рекомендуется выбирать число партиций, кратное количеству брокеров — для равномерного распределения нагрузки;
|
||||
- рекомендуется мониторить отставание потребителей (consumer lag) и при необходимости увеличивать число партиций.
|
||||
|
||||
**Расчет количества партиций:**
|
||||
Количество партиций определяется по формуле:
|
||||
@@ -48,18 +54,29 @@ Partitions = max(NP, NC)
|
||||
|
||||
Фактор репликации определяет количество копий данных, хранящихся на разных брокерах.
|
||||
|
||||
: : : tip
|
||||
Для production-сред настоятельно рекомендуется устанавливать значение 3. Это означает, что у каждой партиции будет один лидер и две реплики, что обеспечивает отказоустойчивость при выходе из строя одного брокера.
|
||||
: : :
|
||||
## Ключевые параметры конфигурации
|
||||
### min.insync.replicas (минимальное количество синхронизированных реплик)
|
||||
> **Рекомендация для production-сред:** установите значение **3**.
|
||||
> При этом каждая партиция получает одного лидера и две реплики, что обеспечивает отказоустойчивость при выходе одного брокера.
|
||||
|
||||
## Дополнительные параметры конфигурации
|
||||
|
||||
### `min.insync.replicas` (минимальное количество синхронизированных реплик)
|
||||
|
||||
Параметр действует совместно с настройкой продюсера `acks=all`. Определяет минимальное количество синхронизированных реплик (включая лидера), которые должны подтвердить запись для её успешного завершения.
|
||||
|
||||
**Рекомендация:** при факторе репликации = 3 установите `min.insync.replicas = 2`.
|
||||
|
||||
**Эффекты:**
|
||||
- **надёжность** — данные записаны минимум на два брокера;
|
||||
- **доступность** — при отказе одного брокера запись продолжается.
|
||||
|
||||
> **Важно:** не устанавливайте значение, равное фактору репликации (например, 3).
|
||||
> В противном случае при перезагрузке одного брокера запись в топик станет невозможной: система будет ожидать подтверждения от всех трёх реплик.
|
||||
|
||||
Параметр работает в связке с настройкой продюсера acks=all. Определяет, сколько реплик (включая лидера) должны подтвердить запись, чтобы она считалась успешной.
|
||||
|
||||
При факторе репликации = 3 рекомендуется установить значение **2**. Это обеспечивает:
|
||||
- надежность: данные записаны минимум на два брокера;
|
||||
- доступность: при отказе одного брокера запись продолжается.
|
||||
- **надежность**: данные записаны минимум на два брокера;
|
||||
- **доступность**: при отказе одного брокера запись продолжается.
|
||||
|
||||
: : : tip
|
||||
::: tip
|
||||
Не рекомендуется устанавливать значение равным фактору репликации (например, 3). В этом случае при перезагрузке одного брокера запись в топик станет невозможной, так как для подтверждения потребуется подтверждение от всех трех реплик.
|
||||
: : :
|
||||
:::
|
||||
|
||||
Reference in New Issue
Block a user