Перейти к содержанию

Добро пожаловать в Kruma Data Contracts

Платформа контрактов данных для SMB

Научим ваш бизнес работать с данными правильно

Быстрый старт Демо контракт


Что такое Data Contracts?

Контракт данных — это формальное соглашение между издателем данных и потребителем, которое определяет:

  • Схему данных


    Какие поля, типы, обязательность

    Apache Avro + Schema Registry

  • Правила качества


    Валидация, constraints, бизнес-правила

    WAP (Write-Audit-Publish)

  • Владельца данных


    Кто отвечает, кому писать

    SLA на реакцию

  • Версионирование


    SemVer, breaking changes

    Автоматическое обнаружение


Зачем это нужно?

Проблемы без контрактов

Типичные боли

  • "Цифры не сходятся" — неконтролируемые изменения в источниках
  • Постоянные инциденты — отсутствие ответственности за качество
  • Долгое время до инсайта — ручная проверка и согласование
  • Невозможность масштабирования — хаотичные процессы

Решение: Data Contracts

Преимущества

  • ↓ 70% сокращение инцидентов с данными
  • ↓ 40% времени аналитиков на валидацию
  • ✅ Автоматическое обнаружение breaking changes
  • ✅ Прозрачная ответственность за качество

Архитектура

graph LR
    A[Producer<br/>1C, CRM] -->|Avro| B[API Gateway<br/>mTLS]
    B -->|201 Created| A
    B --> C[Kafka .raw]
    C --> D[Quality<br/>Validator]
    D --> E[Kafka _prod]
    D --> F[Kafka _dlq]
    F --> G[Alerts]
    E --> H[Consumers<br/>BI, ML]

    style B fill:#4CAF50
    style D fill:#FF9800
    style F fill:#F44336

Ключевой принцип

API Gateway НЕ валидирует данные!

  • Принимает данные "as-is"
  • Сразу возвращает 201 Created
  • Не блокирует издателя
  • Валидация происходит асинхронно в Quality Validator

Для кого эта документация?


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

1. Создайте контракт

domains/sales/orders/contract.yaml
spec_version: "1.0.0"
contract_version: "1.0.0"

metadata:
  name: "orders"
  namespace: "sales"
  display_name: "Заказы клиентов"

  owner:
    team: "sales-integration"
    email: "sales-data@company.ru"

schema:
  file: "./schema.avsc"
  format: "avro"

quality_rules:
  file: "./quality_rules.yml"

2. Определите правила качества

domains/sales/orders/quality_rules.yml
version: "1.0"

rules:
  - name: "order_id_not_null"
    field: "order_id"
    type: "not_null"
    severity: "error"

  - name: "total_amount_positive"
    field: "total_amount"
    type: "range"
    min: 0
    severity: "error"

3. Отправьте данные

import requests
import avro.io

# Сериализация в Avro
avro_payload = serialize_to_avro(record, schema)

# Отправка в API Gateway
response = requests.post(
    "https://data-gateway.company.ru/api/1.0/sales.orders",
    data=avro_payload,
    headers={
        "Content-Type": "application/avro",
        "version": "1.0.0",
        "batch": "1",
    },
    cert=("sales.orders.crt", "sales.orders.key"),
)
# Получаем 201 Created - издатель свободен!
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(
    Новый СертификатКлиентаФайл("sales.orders.crt", "sales.orders.key"),
    Новый СертификатыУдостоверяющихЦентровФайл("ca.crt")
);

HTTPСоединение = Новый HTTPСоединение(
    "data-gateway.company.ru", 443, , , , 30, ЗащищенноеСоединение
);

Технологии

Core

  • Apache Avro
  • Apache Kafka
  • Schema Registry

Storage

  • Apache Iceberg
  • Apache Parquet
  • Gravitino Catalog

Validation

  • Python + Pydantic
  • Quality Rules YAML
  • WAP Pattern

CI/CD

  • GitLab CI/CD
  • JSON Schema
  • SemVer

Контакты

Нужна помощь с внедрением?


Kruma — Trusted Adviser в мире данных