Per-Tenant Partition Budget
Per-topic partition cap is tied to tenant-tier: free <= 6, paid <= 24, enterprise <= 50.
“Somebody created a topic with arbitrary number of partitions.”
Rationale
Partitions are the unit of fan-out cost on Kafka: open file handles, controller state, replication threads. The starter's global 200-partition cap protects the cluster from one rogue topic but doesn't stop a tenant carving out 200 partitions per topic and amplifying noisy-neighbor effects. A tier-aware per-topic cap is the multi-tenant primitive.
Pattern
partitions <= map[tenant-tier] (free:6, paid:24, enterprise:50)
Examples
tenant-tier: free + partitions: 3
tenant-tier: enterprise + partitions: 50
tenant-tier: free + partitions: 12
tenant-tier: paid + partitions: 50
Parameters
| Name | Default | Description |
|---|---|---|
free_max |
6 |
Max partitions per topic for tenant-tier=free. |
paid_max |
24 |
Max partitions per topic for tenant-tier=paid. |
enterprise_max |
50 |
Max partitions per topic for tenant-tier=enterprise (intentionally lower than the global 200 starter cap). |
Governs
This policy relates to the following Kafka configuration keys:
Implementation
Drop this YAML into Conduktor Console as a ResourcePolicy, then link it from an ApplicationInstance, Application, or KafkaCluster.
# Conduktor self-service ResourcePolicy # Schema: https://docs.conduktor.io/platform/reference/resource-reference/self-service/#resourcepolicy # Composes with the starter partition-count-bounds (1..200). The lower of the two # wins because Conduktor evaluates ALL linked policies and rejects on first failure. --- apiVersion: self-serve/v1 kind: ResourcePolicy metadata: name: tenant-partition-budget spec: targetKind: Topic description: Per-topic partition count is capped by tenant-tier (free 6, paid 24, enterprise 50) rules: - condition: '"tenant-tier" in metadata.labels && metadata.labels["tenant-tier"] in ["free", "paid", "enterprise"]' errorMessage: "metadata.labels.tenant-tier must be one of free, paid, enterprise" - condition: '(metadata.labels["tenant-tier"] == "free" && spec.partitions <= 6) || (metadata.labels["tenant-tier"] == "paid" && spec.partitions <= 24) || (metadata.labels["tenant-tier"] == "enterprise" && spec.partitions <= 50)' errorMessage: "Partition count exceeds tenant-tier budget (free 6, paid 24, enterprise 50) — request a tier upgrade or split the workload"
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 →