conduktor.io ↗

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

NameDefaultDescription
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 ResourcePolicy
# 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 →