Добро пожаловать в 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
Для кого эта документация?¶
-
Руководители
-
Разработчики
-
Data Engineers
-
Аналитики
Быстрый старт¶
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 - издатель свободен!
Технологии¶
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
Контакты¶
Нужна помощь с внедрением?
- 📧 Email: hello@kruma.io
- 💬 Slack: kruma.slack.com
- 📚 GitLab: gitlab.company.ru/data/contracts
Kruma — Trusted Adviser в мире данных