> ## Documentation Index
> Fetch the complete documentation index at: https://docs.streamnative.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Kafka Cluster vs. KSN on Pulsar Clusters

> Compare native Kafka Clusters with Kafka compatibility on Pulsar Clusters (KSN). Understand when to use each option.

StreamNative Cloud offers two ways to run Kafka workloads: **Kafka Clusters** (native Apache Kafka) and **Kafka compatibility on Pulsar Clusters** (via KSN). This page helps you understand the differences and choose the right option.

## Overview

* **Kafka Clusters** run native Apache Kafka on the Ursa Engine. There is no protocol translation — your Kafka clients connect directly to a native Kafka broker. This is the recommended option for Kafka workloads.
* **KSN** (on Pulsar Clusters) provides Kafka API compatibility within Pulsar Clusters. KSN translates the Kafka protocol to Pulsar storage, allowing Kafka clients to produce and consume messages on Pulsar topics. This option is best when you need both Kafka and Pulsar clients on the same cluster.

## Feature comparison

| Feature                      | Kafka Cluster                                                      | KSN                                                                                             |
| ---------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------- |
| **Protocol**                 | Native Apache Kafka                                                | Kafka protocol translated to Pulsar                                                             |
| **Kafka API compatibility**  | 100% — native Kafka                                                | High — see [compatibility matrix](/cloud/build/kafka-clients/compatibility/kafka-compatibility) |
| **Transactions**             | Supported on Latency-Optimized; coming soon on Cost-Optimized      | Supported on Latency-Optimized; coming soon on Cost-Optimized                                   |
| **Topic compaction**         | Supported on Latency-Optimized; coming soon on Cost-Optimized      | Supported on Latency-Optimized; coming soon on Cost-Optimized                                   |
| **Kafka Streams**            | Supported                                                          | Supported with limitations on Cost Optimized                                                    |
| **KSqlDB**                   | Supported                                                          | Supported with limitations on Cost Optimized                                                    |
| **Pulsar client access**     | Not available                                                      | Supported — both Pulsar and Kafka clients on the same cluster                                   |
| **Multi-tenancy**            | Topic-level ACLs                                                   | Tenant and namespace isolation                                                                  |
| **Built-in geo-replication** | Via [Universal Linking](/cloud/universal-linking/unilink-overview) | Supported                                                                                       |
| **Subscription types**       | Consumer groups                                                    | Exclusive, shared, failover, key-shared                                                         |
| **Retention policy**         | Standard Kafka retention (time/size-based)                         | Pulsar retention (subscription-based by default)                                                |
| **Cluster profiles**         | Latency-Optimized and Cost-Optimized                               | Latency-Optimized and Cost-Optimized                                                            |
| **Status**                   | Public Preview                                                     | GA                                                                                              |

## When to use Kafka Clusters

Choose Kafka Clusters when:

* You want **full native Kafka behavior** with no protocol translation.
* Your workloads are **Kafka-only** and you do not need Pulsar or MQTT client access.
* You need **Kafka transactions and topic compaction** on the Ursa Engine.
* You are **migrating from Amazon MSK, Confluent, or self-managed Kafka** and want a drop-in replacement.
* You want **standard Kafka retention policies** without learning Pulsar retention concepts.

## When to use KSN on Pulsar Clusters

Choose KSN on Pulsar Clusters when:

* You need **multi-protocol access** — both Kafka and Pulsar clients reading from the same topics.
* You have **existing Pulsar Clusters** and want to add Kafka client access to them.
* You need **Pulsar-specific features** like built-in geo-replication, flexible subscriptions, or multi-tenancy with tenant/namespace isolation.
* You want **MQTT support** on the same cluster via MoP.

## Migration between options

If you are currently using KSN on Pulsar Clusters and want to move to native Kafka Clusters, you can use [Universal Linking](/cloud/universal-linking/unilink-overview) to replicate data between clusters during the transition.

<Note>
  Kafka Clusters and Pulsar Clusters cannot currently co-exist in the same StreamNative instance. Plan your instance topology accordingly.
</Note>

## Next steps

<CardGroup cols={2}>
  <Card title="Get Started with Kafka Service" icon="rocket" href="/kafka/kafka-getting-started">
    Create a native Kafka Cluster and produce your first message.
  </Card>

  <Card title="Kafka on Pulsar Clusters" icon="arrows-rotate" href="/cloud/build/kafka-clients/kafka-on-cloud">
    Set up Kafka compatibility on your existing Pulsar Clusters using KSN.
  </Card>
</CardGroup>
