<a id="multi-tenancy-ecosystem-components"></a>

# Deploy Ecosystem Components on a Multi-Tenant PKC

This page describes how each component fits into a multi-tenant Physical
Kafka Cluster (PKC). Multi-Tenancy is supported starting in Confluent Platform 8.4, and
in Confluent for Kubernetes (CFK), starting in the 3.4 release.

![Multi-tenant PKC architecture showing shared brokers, per-tenant
Logical Kafka Clusters, per-LKC Kafka Connect and ksqlDB
instances, and shared Control Center and MDS](images/private-cloud-multi-tenancy-architecture.png)

Each component uses one of three deployment models:

- **Multi-tenant-aware**: Kafka, Confluent Control Center, and Metadata Service (MDS)
  run as a single shared instance per PKC,
  enforcing isolation or scoping views per LKC through role-based access control (RBAC)
  instead of deploying separate infrastructure per Logical Kafka Cluster
  (LKC).
- **Shared per PKC**: deploy a single shared Schema Registry instance per PKC.
  You can achieve schema isolation between LKCs using
  [Schema Registry contexts](../../schema-registry/schema-contexts-cp.md#work-with-schema-contexts),
  if required.
- **Dedicated per LKC**: deploy a dedicated instance of
  Kafka Connect, ksqlDB, and REST Proxy for each LKC. Each
  instance binds to a single LKC as its backend, so one instance
  can’t serve multiple LKCs.

<a id="multi-tenancy-component-deployment-model"></a>

## Component deployment model

| Component                | Deployment model                                                                                      | Why                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|--------------------------|-------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Kafka                    | Multi-tenant. Shared brokers, isolated per LKC                                                        | Each LKC gets its own advertised broker URLs, and broker-native<br/>architecture enforces LKC boundaries and resource quotas directly, so you<br/>don’t need an extra per-LKC instance.<br/><br/>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| Confluent Control Center | Shared per PKC, RBAC-scoped views per persona                                                         | RBAC scopes each persona’s console view to their own PKC or LKC,<br/>so one shared instance can serve every LKC without exposing<br/>others’ resources. Requires Confluent Control Center 2.7 or later and<br/>`spec.authorization.type: rbac` on the `ControlCenter` custom<br/>resource (CR).<br/><br/>For more information, see<br/>[Configure RBAC for Control Center on Confluent<br/>Platform](/control-center/current/security/c3-rbac.html).<br/><br/> |
| MDS                      | Single instance bound to the Kafka brokers, supporting both<br/>PKC-wide and LKC-scoped role bindings | LKC-scoped role bindings let one shared identity and<br/>authorization foundation govern every LKC, without a separate<br/>RBAC deployment per LKC.<br/><br/>For more information, see [Manage RBAC for Confluent Platform<br/>Using Confluent for Kubernetes](https://docs.confluent.io/operator/current/co-manage-rbac.html).<br/><br/>                                                                                                                                                            |
| Schema Registry          | Shared per PKC                                                                                        | A single shared instance can serve every LKC. LKCs that<br/>need schema isolation use a Schema Registry context to separate<br/>their schemas from other LKCs’ without a dedicated instance.<br/>Confluent recommends this approach.<br/><br/>For more information, see [Manage Schemas for Confluent Platform<br/>Using Confluent for Kubernetes](https://docs.confluent.io/operator/current/co-manage-schemas.html).<br/><br/>                                                                                                                                                                                                                                                                                                                                 |
| Kafka Connect            | Dedicated per LKC                                                                                     | Configures its own LKC bootstrap URL as its backend, so each<br/>LKC needs its own dedicated instance to route to the right LKC.<br/><br/>For more information, see [Manage Connectors for Confluent<br/>Platform Using Confluent for Kubernetes](https://docs.confluent.io/operator/current/co-manage-connectors.html).<br/><br/>                                                                                                                                                                                                                                                                                                                                                                                        |
| ksqlDB                   | Dedicated per LKC                                                                                     | Configures its own LKC bootstrap URL as its backend, so each<br/>LKC needs its own dedicated instance to route to the right LKC.<br/><br/>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| REST Proxy               | Dedicated per LKC                                                                                     | Configures its own LKC bootstrap URL as its backend, so each<br/>LKC needs its own dedicated instance to route to the right LKC.<br/><br/>For more information, see [Configure and Manage REST Proxy for<br/>Confluent Platform Using Confluent for Kubernetes](https://docs.confluent.io/operator/current/co-configure-rest-proxy.html).<br/><br/>                                                                                                                                                                                                                                                                                                                                                                                                              |

For each LKC, point the dedicated Kafka Connect, ksqlDB, or
REST Proxy CR at that LKC instead of the PKC’s own `Kafka` CR.
Set `dependencies.kafka.discovery.kind` to `LogicalKafkaCluster`
and `dependencies.kafka.discovery.name` to the LKC’s name.

After discovery resolves the LKC’s bootstrap URL, Kafka Connect
and ksqlDB register themselves in the MDS cluster registry, so Confluent Control Center can
discover them by LKC. REST Proxy doesn’t register itself in the cluster registry,
so Confluent Control Center can’t discover an LKC-scoped REST Proxy instance.

## Tiered storage

Tiered storage works the same way on a multi-tenant PKC as on a
single-tenant cluster. The broker archives eligible segments to remote
object storage.

The PKC accepts tiered-storage topic configurations, such as
`confluent.tier.enable`, at topic-creation time. For more information about
configuring tiered storage, see [Tiered Storage in Confluent Platform](../../clusters/tiered-storage.md#tiered-storage).

## Related content

- [Multi-Tenancy Overview](overview.md#multi-tenancy-overview)
- [Configure TLS Certificates and DNS for Multi-Tenant PKCs](tls-options.md#multi-tenancy-tls-options)
