Multi-Tenant Analytics
End-to-end guide for serving multiple customers from a shared Pinot cluster with resource and data isolation.
When to use this pattern
Architecture sketch
Customer A ──▶ App backend ──▶ Broker pool A ──▶ Servers (tenant A)
Customer B ──▶ App backend ──▶ Broker pool B ──▶ Servers (shared)
Customer C ──▶ App backend ──▶ Broker pool B ──▶ Servers (shared)
│
(injects tenant_id
filter into every query)Data model
Single-table approach (recommended for most cases)
Table-per-tenant approach (for extreme isolation)
Table configuration
Why tenantId is the sorted column
tenantId is the sorted columnInfrastructure isolation with Pinot tenants
Assigning servers to tenants
Workload-based query isolation
Broker-level query quotas
Data isolation (row-level security)
Implementation pattern
Validating isolation
Query patterns
Per-tenant dashboard aggregation
Cross-tenant admin query (internal analytics)
Operational checklist
Before go-live
Monitoring
Common pitfalls
Pitfall
Fix
Further reading
Last updated
Was this helpful?

