Topic Must Declare owner and data-criticality Labels
Every topic must carry `owner` (email) and `data-criticality` (C0..C3) labels.
Rationale
The single most repeated platform-engineer complaint: "we have 4,000 topics and nobody knows who owns half of them." Without an `owner` label at create-time you cannot run a stale-topic sweep, you cannot page anyone during incidents, and chargeback rollup is impossible. `data-criticality` (C0/C1/C2/C3) drives alerting thresholds downstream.
Pattern
labels.owner matches email AND labels["data-criticality"] in [C0, C1, C2, C3]
Examples
labels: { owner: "payments-team@acme.io", data-criticality: "C1" }
no labels
labels: { owner: "tbd" }
Parameters
| Name | Default | Description |
|---|---|---|
allowed_criticality |
["C0","C1","C2","C3"] |
Allowed values for data-criticality. |
Implementation
Drop this YAML into Conduktor Console as a ResourcePolicy, then link it from an ApplicationInstance, Application, or KafkaCluster.
Conduktor ResourcePolicy
# Conduktor self-service ResourcePolicy # metadata.labels is optional — has(...) guards avoid silent rejection. --- apiVersion: self-serve/v1 kind: ResourcePolicy metadata: name: topic-owner-label-required spec: targetKind: Topic description: every topic must carry owner (email) and data-criticality (C0..C3) labels rules: - condition: 'has(metadata.labels.owner) && metadata.labels.owner.matches("^[a-z0-9._-]+@[a-z0-9.-]+\\.[a-z]{2,}$") && "data-criticality" in metadata.labels && metadata.labels["data-criticality"] in ["C0", "C1", "C2", "C3"]' errorMessage: "metadata.labels.owner (email) and metadata.labels[\"data-criticality\"] (C0..C3) are required — unowned topics become stale and unpageable"
Related policies
Try Conduktor Console
Enforce policies like this across your team — central audit history, pre-commit guardrails, ApplicationInstance bindings. 5-min Docker install.
Get Started →