# Конфигурация outbox-relay `outbox-relay` (репозиторий `outbox-relay`, образ `outbox-relay`) — воркер transactional outbox для cde-api: опрашивает таблицу `outbox` в БД cde-api и публикует события в Kafka. HelmRelease `outbox-relay` в ns `documentations`, Service нет, 1 реплика. Манифест — `base/outbox-relay.yaml` и одноимённые файлы в `ugok/`, `brusnika-*/`, `wb/`. Миграции не запускает: таблицу `outbox` создаёт cde-api (`migrations/001_create_outbox.sql` из репозитория relay нужно включить в миграции cde-api). БД — **общая с documentations** (как и у cde-api), поэтому таблица `outbox` появляется в БД documentations. ## Переменные окружения Префикс `OUTBOX_RELAY_`, секции через `__`. | Переменная | Значение | Комментарий | | --- | --- | --- | | `APP_NAME`, `APP_VERSION` | `cde-api-outbox-relay`, `0.1.0` | | | `SOURCE_SERVICE`, `SOURCE_VERSION` | `cde-api`, `0.1.0` | значения поля source в envelope событий | | `LOG_LEVEL` | `info` | | | `PG__SSLMODE` | `disable` | как у cde-api в iac (общий Postgres без TLS) | | `PG__POOL_MIN` / `PG__POOL_MAX` | `1` / `3` | | | `PG__TABLE` | `outbox` | | | `PG__HOST/PORT/NAME/USER/PASSWORD` | Vault `secrets/data/apps/documentations/postgres` (vault-контуры) или литералы + секрет БД контура | та же БД, что у cde-api | | `POLL_INTERVAL` / `BATCH_SIZE` | `500ms` / `100` | | | `MAX_ATTEMPTS` / `INITIAL_BACKOFF` / `MAX_BACKOFF` | `8` / `1s` / `5m` | | | `SHUTDOWN_TIMEOUT` | `30s` | | | `KAFKA__BROKERS` | см. таблицу ниже | | | `KAFKA__SECURITY_PROTOCOL` | `SASL_SSL` (vault-контуры) / `SSL` (остальные) | включает TLS; SASL включается, если задан `SASL_USERNAME` | | `KAFKA__INSECURE_SKIP_VERIFY` | `true` | сертификат брокера не проверяется, CA не нужен; клиентский сертификат (mTLS) relay не поддерживает | | `KAFKA__SASL_MECHANISM/USERNAME/PASSWORD` | Vault `secrets/data/kafka/apps/documentations` | только vault-контуры | В `.helm/values.yaml` репозитория relay используются `KAFKA__HOST/PORT` и секрет `cde-api-kafka-secret`; в iac вместо них — `KAFKA__BROKERS` и адреса Kafka своего контура. ## Kafka по контурам | Контур | Brokers | Протокол | Проверка сертификата | Аутентификация | | --- | --- | --- | --- | --- | | `base` (`sarex-contour`, `yc-k8s-test`, `d8-ugmk-prod`, `uralkal`, `vad`) | `kafka-kafka-contour.kafka.svc.cluster.local:9092` | `SASL_SSL` | не проверяется | Vault `secrets/data/kafka/apps/documentations` | | `wb` | `wb-prod-kafka-bootstrap.kafka.svc.cluster.local:9093` | `SSL` | не проверяется | нет (как у pm) | | `ugok` | `ugok-prod-kafka-bootstrap.kafka.svc.cluster.local:9093` | `SSL` | не проверяется | нет | | `brusnika-prod`, `brusnika-stage` | `brusnika-stage-kafka-bootstrap.kafka.svc.cluster.local:9093` | `SSL` | не проверяется | нет | ## Допущения и что нужно проверить - **Vault:** путь `secrets/data/kafka/apps/documentations` (SCRAM-пользователь с правом писать в топики cde-api) нужно создать, роль `documentations` — разрешить его чтение. - **`brusnika-prod`:** адрес Kafka взят из brusnika-stage (так указано в `bi/brusnika-prod`, у pm в brusnika-prod Kafka не настроена). - **`sarex-contour`, `yc-k8s-test`:** адрес `kafka-kafka-contour` взят у остальных vault-контуров; сверить с `infrastructure/kafka/<кластер>`. - Топики событий (39 штук, список — `docs/cde-api-rollout.md`, раздел 5) создаёт команда инфраструктуры до запуска relay.