AI-Ops Documentation

Русский English
  • Главная
  • Карта документации
0. С чего начать
  • Что это за продукт
  • Для кого он
  • Как устроена документация
  • Быстрые ссылки
  • Как начать разработку
  • Как найти нужный сервис
  • К кому идти по вопросам
1. Продукт
Обзор продукта
  • Миссия продукта
  • Ценность для бизнеса
  • Основные сценарии
  • Границы системы
Пользователи и персоны
  • Сегменты пользователей
  • Роли пользователей
  • Основные потребности
Пользовательские сценарии
  • Регистрация / логин
  • Основной пользовательский сценарий
  • Оплата / заказ / действие
  • Поддержка и сценарий восстановления
Функции продукта
Фича: Аутентификация
  • Цель
  • Пользовательская история
  • Бизнес-правила
  • Ограничения
  • Метрики успеха
  • Связанные сервисы
  • Связанные события / данные
  • Фича: Профиль
  • Фича: Организации
  • Фича: Топология
  • Фича: Вычислительные ресурсы
  • Фича: Кластеры
  • Фича: Каталог сервисов
Требования
  • Функциональные требования
  • Нефункциональные требования
  • Требования к производительности
  • Требования к безопасности
  • Конфиденциальность и соответствие
  • Доступность
Метрики
  • Ключевая метрика (North Star)
  • Продуктовые KPI
  • Метрики воронки
  • Метрики качества
  • Метрики экспериментов
2. Домены
Домен: Identity
  • Назначение
  • Основные концепции
  • Сущности
  • Бизнес-правила
  • Сервисы домена
  • Данные домена
  • Связанные фичи
  • Домен: Профиль пользователя
  • Домен: Поиск
  • Домен: Заказы / транзакции
  • Домен: Уведомления
  • Домен: Аналитика
  • Домен: Рекомендации
3. Архитектура
Обзор системы
  • Что входит в систему
  • Что не входит
  • Высокоуровневая диаграмма
C4 Model
  • Контекстная диаграмма
  • Диаграмма контейнеров
  • Диаграмма компонентов
  • Диаграмма развёртывания
Интеграционная архитектура
  • Внешние системы
  • Интеграции API
  • Webhooks
  • Сторонние провайдеры
Потоки данных
  • Онлайн-поток данных
  • Пакетный поток данных
  • Поток событий
  • Владение данными
Архитектура безопасности
  • Аутентификация
  • Авторизация
  • Управление секретами
  • Шифрование
  • Аудит и логирование
Надежность и масштабируемость
  • SLA / SLO
  • Планирование мощностей
  • Отказоустойчивость
  • Обратное давление и повторы
  • Восстановление после сбоев
Архитектурные принципы
  • Границы доменов
  • Принципы проектирования API
  • Принципы проектирования событий
  • Принципы контрактов данных
  • Диаграмма: auth микросервисы
Control plane
  • Архитектура компонентов (control plane)
  • Доменная модель v0
  • Протокол v0 (control plane)
  • Примеры (control plane)
Сервисы (control plane)
Сервис control plane
  • API
  • Модель данных
  • События
  • Модули
  • Операции
Сервис execution plane
  • API
  • Модель данных
  • События
  • Модули
  • Операции
Сервис resource catalog
  • API
  • Модель данных
  • События
  • Модули
  • Операции
4. Инженерия
Сервисы
Каталог сервисов
  • Все сервисы списком
  • Владельцы
  • Критичность
  • Уровень / домен / статус
  • Сервис аутентификации
  • Сервис аккаунтов
  • Облачный сервис
  • Сервис учётных данных
  • Herald
  • Сервис идентификации
  • API Gateway
  • Сервис токенов
Фронтенд
  • Обзор фронтенда
  • Структура приложения
  • Routing (фронтенд)
  • State management (фронтенд)
  • Design system (фронтенд)
  • UI components (фронтенд)
  • API контракты фронтенда
  • Обработка ошибок (фронтенд)
  • Performance (фронтенд)
  • Feature flags (фронтенд)
  • Тестирование фронтенда
Бэкенд
  • Обзор бэкенда
  • Паттерны сервисов
  • Рекомендации по API
  • Событийные паттерны
  • Паттерны доступа к БД
  • Кэширование
  • Асинхронные задачи и воркеры
  • Идемпотентность
  • Обработка ошибок
  • Тестирование бэкенда
Данные
  • Обзор данных
  • Системы-источники
  • Контракты данных
  • Каталог схем событий
  • Хранилище данных
  • Витрины данных
  • ETL / ELT-пайплайны
  • Качество данных
  • Происхождение данных
  • Политики хранения
  • Политики доступа
ML / DS
  • Обзор ML/DS
  • Сценарии (ML)
  • Каталог моделей
  • Feature store
  • Training pipelines
  • Inference pipelines
  • Offline evaluation
  • Online evaluation / A-B
  • Мониторинг (ML)
  • ML runbooks
QA / Качество
  • Стратегия качества
  • Пирамида тестов
  • Тестовые окружения
  • Тестовые данные
  • Ручное тестирование
  • Автоматизированное тестирование
  • Нагрузочное тестирование
  • Тестирование безопасности
  • Критерии приёмки релиза
  • Процесс разбора багов
5. Платформа
Инфраструктура
  • Ansible
  • WireGuard
  • Kubernetes
  • Longhorn
  • Ingress
  • PostgreSQL Cluster
  • Redis
  • Kafka
  • Vault
  • MinIO
  • Authentik
  • Monitoring
  • Logging
  • Tracing
  • Nexus
  • SonarQube
  • GlitchTip
  • GitLab Runner
  • Kubernetes Dashboard
  • OLM
  • Deploy
  • Internal DNS
  • Обзор (инфраструктура)
  • Config generator
  • Пример (инфраструктура)
  • Скрипты (инфраструктура)
Окружения
  • Локальное
  • Stage
  • Pre
  • Продакшен (prod)
  • Tech
  • Облако
  • Объектное хранилище
  • CI/CD
  • Секреты и сертификаты
Наблюдаемость
  • Логирование
  • Метрики
  • Трейсинг
  • Алертинг
  • Резервное копирование и восстановление
6. Разработка
  • Быстрый старт
  • Локальная настройка
  • Карта репозиториев
  • Стандарты кода
  • Git-процесс
  • Стратегия ветвления
  • Руководство по код-ревью
  • Критерии готовности
  • Процесс релиза
  • Флаги фич
  • FAQ разработчика
  • Миграция secure auth
7. Эксплуатация
  • Дежурство
  • Управление инцидентами
  • Уровни критичности
  • Политика эскалации
  • Постмортемы
  • Ранбуки
  • Управление изменениями
  • Непрерывность бизнеса
8. Аналитика
  • План трекинга событий
  • Определения KPI
  • Каталог дашбордов
  • Словарь метрик
  • Эксперименты
  • Стандарты отчётности
9. Управление
  • Решения (ADR)
  • Политика статуса контента
  • Changelog обновлений документации
Безопасность и соответствие
  • Модель угроз
  • Безопасная разработка
  • Управление доступом
  • Конфиденциальность
  • Реагирование на инциденты
Ответственность и владельцы
  • Команды
  • Зоны ответственности команд
  • Владельцы сервисов
  • Владельцы доменов
  • Контакты
Глоссарий
  • Бизнес-термины
  • Продуктовые термины
  • Технические термины
  • Сокращения

Index

Документация по установке и использованию Kafka HA кластера через Strimzi Operator.

Оглавление

  • Описание
  • Быстрый старт
  • Архитектура
  • Команды
  • Конфигурация
  • Подключение
  • Troubleshooting

Описание

Strimzi Kafka Operator - Kubernetes оператор для управления Kafka кластерами с поддержкой HA режима.

Возможности

  • ✅ HA Kafka Cluster режим
  • ✅ Автоматическое управление кластером
  • ✅ SASL/SCRAM-SHA-512 аутентификация
  • ✅ Мониторинг через Kafka Exporter
  • ✅ Persistent storage
  • ✅ Cruise Control для ребалансировки
  • ✅ Kafka UI для управления

Текущая конфигурация

  • Operator namespace: tech-kafka-operator
  • Clusters namespace: tech-kafka-clusters
  • Storage: Longhorn (8Gi для Kafka и Zookeeper, StorageClass: longhorn-kafka)
  • Placement: Operator и Kafka поды могут размещаться на любых нодах (masters + workers)
  • Cluster size: 3 Kafka брокера + 3 Zookeeper ноды
  • Authentication: SASL/SCRAM-SHA-512 (обязательная аутентификация)
  • Authorization: Simple ACLs (полные права для kafka-cluster-user)
  • Mode: Zookeeper (классический режим с Zookeeper)

Быстрый старт

1. Подготовка нод

Подготовка нод выполняется автоматически через Ansible playbook:

1
cd ../.. && make k8s-prepare-nodes

Это добавит: - На master нодах: label node-role.kubernetes.io/control-plane=true и taint node-role.kubernetes.io/control-plane:NoSchedule - На worker нодах: label node-role.kubernetes.io/worker=true

2. Установка Operator

1
2
cd infra/k8s
make kafka-install-operator

Это установит Strimzi Kafka Operator через Helm chart из официального репозитория.

3. Создание кластера

1
make kafka-create-cluster

Это создаст: - StorageClass longhorn-kafka - Kafka кластер kafka-cluster с 3 брокерами в режиме KRaft (без Zookeeper) - KafkaUser kafka-cluster-user с SASL/SCRAM-SHA-512 аутентификацией

Важно: - KafkaUser автоматически создаст секрет kafka-cluster-user с паролем - Пароль генерируется автоматически Strimzi оператором - Username берется из имени KafkaUser: kafka-cluster-user

4. Установка Kafka UI

1
make kafka-install-ui

5. Проверка статуса

1
make kafka-status

Архитектура

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
┌─────────────────────────────────────┐
│  tech-kafka-operator                │
│  └── strimzi-cluster-operator       │
│      (deployment)                   │
└─────────────────────────────────────┘

┌─────────────────────────────────────┐
│  tech-kafka-clusters                │
│                                     │
│  kafka-cluster (Kafka CR, KRaft)    │
│  ├── kafka-cluster-kafka-0          │
│  │   (broker + controller)          │
│  ├── kafka-cluster-kafka-1          │
│  │   (broker + controller)          │
│  └── kafka-cluster-kafka-2          │
│      (broker + controller)          │
│                                     │
│  kafka-cluster-user (KafkaUser CR)  │
│  └── kafka-cluster-user (Secret)    │
│                                     │
│  Services:                          │
│  ├── kafka-cluster-kafka-bootstrap  │
│  └── kafka-cluster-kafka-brokers    │
│                                     │
│  kafka-ui (Deployment)              │
└─────────────────────────────────────┘

Команды

Управление

1
2
3
4
5
6
7
8
make kafka-install-operator   # Установка оператора
make kafka-create-cluster     # Создание кластера kafka-cluster
make kafka-delete-cluster     # Удаление кластера (сохраняет оператор)
make kafka-install-ui        # Установка Kafka UI
make kafka-ui-port-forward   # Port-forward Kafka UI (http://localhost:8080)
make kafka-status            # Статус оператора и кластеров
make kafka-connect           # Инструкции по подключению
make kafka-uninstall         # Удаление (УДАЛЯЕТ ДАННЫЕ!)

Справка

1
make kafka-help  # Справка по Kafka командам

Конфигурация

Operator

Оператор устанавливается через Helm chart из официального репозитория: - Helm chart: strimzi-kafka-operator/strimzi-kafka-operator версия 0.40.0 - Helm repository: https://strimzi.io/charts/ - CRDs устанавливаются автоматически при установке Helm chart - ServiceAccount, Role, RoleBinding создаются автоматически

Кластер kafka-cluster

Конфигурация в manifests/kafka-operator/kafka-cluster.yaml:

  • Kafka version: 3.7.0
  • Mode: Zookeeper (классический режим)
  • Replicas: 3 Kafka брокера + 3 Zookeeper ноды
  • Storage: 8Gi per broker/Zookeeper (Longhorn, StorageClass: longhorn-kafka)
  • Resources:
  • Kafka: 200m-1 CPU, 512Mi-1Gi RAM per broker
  • Zookeeper: 100m-500m CPU, 256Mi-512Mi RAM per node
  • Listeners:
  • plain (port 9092): Internal, SASL/SCRAM-SHA-512
  • tls (port 9093): Internal, TLS, SASL/SCRAM-SHA-512
  • Authentication: SASL/SCRAM-SHA-512 (обязательная)
  • Authorization: Simple ACLs (org.apache.kafka.metadata.authorizer.SimpleAclAuthorizer)
  • Node placement: Любые ноды (masters + workers)
  • Pod anti-affinity: Разные ноды по kubernetes.io/hostname

KafkaUser

KafkaUser kafka-cluster-user создается автоматически вместе с кластером: - Authentication: SASL/SCRAM-SHA-512 - Authorization: Simple ACLs с полными правами на все топики, группы и транзакции - Secret: Автоматически создается Strimzi с именем kafka-cluster-user - Ключ password: пароль для аутентификации - Ключ ca.crt: CA сертификат (для TLS)

StorageClass

StorageClass longhorn-kafka создается автоматически при создании кластера: - Provisioner: driver.longhorn.io - Replicas: 1 - Reclaim policy: Delete - Volume binding: Immediate

Подключение

Connection Strings

1
2
3
4
5
6
7
# Bootstrap server (internal)
kafka-cluster-kafka-bootstrap.tech-kafka-clusters.svc.cluster.local:9092

# Individual brokers (internal)
kafka-cluster-kafka-0.kafka-cluster-kafka-brokers.tech-kafka-clusters.svc.cluster.local:9092
kafka-cluster-kafka-1.kafka-cluster-kafka-brokers.tech-kafka-clusters.svc.cluster.local:9092
kafka-cluster-kafka-2.kafka-cluster-kafka-brokers.tech-kafka-clusters.svc.cluster.local:9092

Authentication

  • Mechanism: SASL/SCRAM-SHA-512
  • Username: kafka-cluster-user (из имени KafkaUser)
  • Password: Получить из секрета:
    1
    kubectl -n tech-kafka-clusters get secret kafka-cluster-user -o jsonpath='{.data.password}' | base64 -d
    

Подключение через kubectl exec

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# Получение пароля из секрета
KAFKA_PASSWORD=$(kubectl -n tech-kafka-clusters get secret kafka-cluster-user -o jsonpath='{.data.password}' | base64 -d)

# Подключение к Kafka брокеру
kubectl -n tech-kafka-clusters exec -it kafka-cluster-kafka-0 -- \
  kafka-console-producer.sh \
    --bootstrap-server localhost:9092 \
    --topic test-topic \
    --producer-property security.protocol=SASL_PLAINTEXT \
    --producer-property sasl.mechanism=SCRAM-SHA-512 \
    --producer-property sasl.jaas.config="org.apache.kafka.common.security.scram.ScramLoginModule required username=\"kafka-cluster-user\" password=\"$KAFKA_PASSWORD\";"

# Consumer
kubectl -n tech-kafka-clusters exec -it kafka-cluster-kafka-0 -- \
  kafka-console-consumer.sh \
    --bootstrap-server localhost:9092 \
    --topic test-topic \
    --from-beginning \
    --consumer-property security.protocol=SASL_PLAINTEXT \
    --consumer-property sasl.mechanism=SCRAM-SHA-512 \
    --consumer-property sasl.jaas.config="org.apache.kafka.common.security.scram.ScramLoginModule required username=\"kafka-cluster-user\" password=\"$KAFKA_PASSWORD\";"

Подключение из приложения

Python (kafka-python)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from kafka import KafkaProducer, KafkaConsumer
import os

# Получение пароля из переменной окружения или секрета
password = os.getenv('KAFKA_PASSWORD', 'your-password')

# Producer
producer = KafkaProducer(
    bootstrap_servers=['kafka-cluster-kafka-bootstrap.tech-kafka-clusters.svc.cluster.local:9092'],
    security_protocol='SASL_PLAINTEXT',
    sasl_mechanism='SCRAM-SHA-512',
    sasl_plain_username='kafka-cluster-user',
    sasl_plain_password=password,
    value_serializer=lambda v: v.encode('utf-8')
)

# Отправка сообщения
producer.send('test-topic', b'Hello, Kafka!')
producer.flush()

# Consumer
consumer = KafkaConsumer(
    'test-topic',
    bootstrap_servers=['kafka-cluster-kafka-bootstrap.tech-kafka-clusters.svc.cluster.local:9092'],
    security_protocol='SASL_PLAINTEXT',
    sasl_mechanism='SCRAM-SHA-512',
    sasl_plain_username='kafka-cluster-user',
    sasl_plain_password=password,
    auto_offset_reset='earliest',
    group_id='my-consumer-group',
    value_deserializer=lambda m: m.decode('utf-8')
)

# Чтение сообщений
for message in consumer:
    print(f"Received: {message.value}")

Java (Spring Kafka)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# application.yml
spring:
  kafka:
    bootstrap-servers: kafka-cluster-kafka-bootstrap.tech-kafka-clusters.svc.cluster.local:9092
    security:
      protocol: SASL_PLAINTEXT
    properties:
      sasl:
        mechanism: SCRAM-SHA-512
        jaas:
          config: org.apache.kafka.common.security.scram.ScramLoginModule required username="kafka-cluster-user" password="${KAFKA_PASSWORD}";

Примечание: Для production рекомендуется использовать Kubernetes Secrets для передачи пароля в приложение через переменные окружения или mounted volumes.

Kafka UI

Kafka UI - веб-интерфейс для управления и мониторинга Kafka кластеров.

Установка

1
make kafka-install-ui

Доступ

1
2
3
4
5
# Запустить port-forward
make kafka-ui-port-forward

# Открыть в браузере
http://localhost:8080

Подключение к кластеру в Kafka UI

  1. Kafka UI автоматически подключится к кластеру kafka-cluster при запуске
  2. Используется аутентификация через секрет kafka-cluster-user
  3. В интерфейсе доступны:
  4. Просмотр топиков и их конфигурации
  5. Просмотр сообщений
  6. Управление consumer groups
  7. Мониторинг метрик кластера

Troubleshooting

Проверка статуса оператора

1
2
kubectl -n tech-kafka-operator get pods
kubectl -n tech-kafka-operator logs deployment/strimzi-cluster-operator

Проверка статуса кластера

1
2
3
4
5
6
7
8
# Статус CR
kubectl -n tech-kafka-clusters get kafka kafka-cluster -o yaml

# Статус подов
kubectl -n tech-kafka-clusters get pods -l strimzi.io/cluster=kafka-cluster

# Логи брокера
kubectl -n tech-kafka-clusters logs kafka-cluster-kafka-0

Проверка Kafka кластера

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Подключение к брокеру
kubectl -n tech-kafka-clusters exec -it kafka-cluster-kafka-0 -- bash

# Внутри пода
# Список топиков
kafka-topics.sh --bootstrap-server localhost:9092 --list \
  --command-config /tmp/client.properties

# Описание топика
kafka-topics.sh --bootstrap-server localhost:9092 --describe \
  --topic test-topic --command-config /tmp/client.properties

Проверка PVC

1
2
3
4
5
# Проверка PVC
kubectl -n tech-kafka-clusters get pvc

# Проверка StorageClass
kubectl get storageclass longhorn-kafka

Проверка аутентификации

1
2
3
4
5
# Получение пароля
kubectl -n tech-kafka-clusters get secret kafka-cluster-user -o jsonpath='{.data.password}' | base64 -d

# Проверка KafkaUser
kubectl -n tech-kafka-clusters get kafkauser kafka-cluster-user -o yaml

Пересоздание кластера

1
2
3
4
5
# Удаление кластера
make kafka-delete-cluster

# Создание заново
make kafka-create-cluster

Проблемы с KRaft контроллерами

1
2
3
4
5
# Проверка Kafka брокеров (которые также работают как контроллеры в KRaft)
kubectl -n tech-kafka-clusters get pods -l strimzi.io/cluster=kafka-cluster

# Логи брокера/контроллера
kubectl -n tech-kafka-clusters logs kafka-cluster-kafka-0

Дополнительные ресурсы

  • Strimzi Documentation
  • Strimzi GitHub
  • Kafka Documentation
  • Kafka UI GitHub

← Назад к главной документации

Меню
Главная Карта документации
0. С чего начать
С чего начать Что это за продукт Для кого он Как устроена документация Быстрые ссылки Как начать разработку Как найти нужный сервис К кому идти по вопросам
1. Продукт
Продукт
2. Домены
Домены Домен: Профиль пользователя Домен: Поиск Домен: Заказы / транзакции Домен: Уведомления Домен: Аналитика Домен: Рекомендации
3. Архитектура
Архитектура Диаграмма: auth микросервисы
4. Инженерия
Инженерия
5. Платформа
Платформа Облако Объектное хранилище CI/CD Секреты и сертификаты Резервное копирование и восстановление
6. Разработка
Разработка Быстрый старт Локальная настройка Карта репозиториев Стандарты кода Git-процесс Стратегия ветвления Руководство по код-ревью Критерии готовности Процесс релиза Флаги фич FAQ разработчика Миграция secure auth
7. Эксплуатация
Эксплуатация Дежурство Управление инцидентами Уровни критичности Политика эскалации Постмортемы Ранбуки Управление изменениями Непрерывность бизнеса
8. Аналитика
Аналитика План трекинга событий Определения KPI Каталог дашбордов Словарь метрик Эксперименты Стандарты отчётности
9. Управление
Управление Решения (ADR) Политика статуса контента Changelog обновлений документации

На странице

Оглавление Описание Возможности Текущая конфигурация Быстрый старт 1. Подготовка нод 2. Установка Operator 3. Создание кластера 4. Установка Kafka UI 5. Проверка статуса Архитектура Команды Управление Справка Конфигурация Operator Кластер kafka-cluster KafkaUser StorageClass Подключение Connection Strings Authentication Подключение через kubectl exec Подключение из приложения Kafka UI Установка Доступ Подключение к кластеру в Kafka UI Troubleshooting Проверка статуса оператора Проверка статуса кластера Проверка Kafka кластера Проверка PVC Проверка аутентификации Пересоздание кластера Проблемы с KRaft контроллерами Дополнительные ресурсы