Request an exact quote
Message & Streaming migration path

From Confluent Platform to Apache Kafka

Moving off Confluent to self-managed Apache Kafka (KRaft), what Confluent's value-add actually is, MirrorMaker 2 bridging, repointing clients, and draining lag before cutover.

Effort
Medium
Est. timeline
~15 wks
Apache Kafka model
Free (self-managed)
Open source
Yes
▶ Model your savings in the interactive calculator

Confluent Platform is Apache Kafka plus a commercial layer, priced by subscription/CKU that scales with throughput, with premium connectors and features on top. Because Confluent is Kafka at the core, moving to self-managed open-source Apache Kafka keeps the same wire protocol and client APIs, your producers and consumers barely change. The work is replacing Confluent’s value-add components and bridging the data without loss.

Know what Confluent adds before you drop it

The Kafka brokers and client API are open source and identical. What you give up by leaving Confluent Platform:

  • Schema Registry, open-source Kafka has the Apache/community registry; the Confluent Schema Registry has its own licensing, so plan an open equivalent (e.g. Apicurio) if you use schemas heavily.
  • Pre-built connectors, many Confluent connectors are commercial; you’ll use open Kafka Connect connectors or write your own.
  • ksqlDB, Control Center, RBAC, tiered storage, Self-Balancing, these are Confluent extras. Replace with open tooling (Kafka Streams/Flink, CMAK/Redpanda Console for UI, standard ACLs) or do without.

If you mostly use core pub/sub and a few connectors, the migration is light. If you’re deep into ksqlDB and the commercial connector catalog, scope those replacements first.

Both sides are Kafka, so it’s an inventory not a translation

There is no paradigm shift here, both sides are Kafka, so the “mapping” is really an inventory of surface area rather than a translation of semantics. Topics keep their names, partition counts, and retention. Replication factor, cleanup policy (delete vs compact), and per-topic overrides all carry across, so capture the full topic config, not just the topic list. ACLs and any RBAC role bindings from Confluent need to be re-expressed as standard Kafka ACLs, which is where estates that leaned on Confluent RBAC do real work, the model is coarser and you may consolidate roles.

The pieces that are not one-for-one live above the broker. Schema references embedded in messages point at a registry by ID, so the registry migration and the topic migration are linked: a consumer on the new cluster must resolve the same schema ID it sees in the payload. Connectors are configuration plus running tasks; you recreate the config against open Kafka Connect and let the connector rebuild its state from its stored offsets. ksqlDB queries have no open drop-in, so those become Kafka Streams or Flink jobs, treat that as application work scheduled alongside, not part of, the broker cutover.

Keep both clusters live, then drain the lag

The clean path keeps both clusters live during transition:

  1. Inventory topics, partitions, ACLs, schemas, connectors, and, critically, delivery semantics (ordering, at-least-once vs exactly-once). Baseline throughput and consumer lag.
  2. Stand up open Kafka in KRaft mode (no ZooKeeper), recreate topics/configs and ACLs, and stand up your chosen registry/UI.
  3. Bridge with MirrorMaker 2 to replicate topics, consumer offsets, and configs from Confluent to the new cluster, keeping them in sync.
  4. Repoint producers first, consumers second, then let MirrorMaker drain until consumer lag reaches zero.
  5. Cut over once lag is drained and clients are confirmed on the new cluster; retire the Confluent cluster after a soak window.

Producers first, then consumers, and why the order matters

Producers move first for a reason. Once a producer writes to the new cluster, MirrorMaker keeps the new topic authoritative and mirrors it back if you need to, but you never have a consumer reading from the new cluster while its only producer still writes to the old one. Move producers topic family by topic family, confirm the new cluster is receiving, then move the matching consumers and watch their lag drain against the mirrored backlog. Keep MirrorMaker running in both directions during this window if any flow is bidirectional, and only stop it once every producer and consumer for a topic is confirmed on the target. A consumer that quietly stayed pointed at Confluent is the classic way to strand messages after you think you have cut over, so reconcile the client inventory before retiring anything.

Sizing and operations

Self-managed Kafka shifts cost from subscription to broker compute + operations, usually far lower at scale, but you now own broker tuning, rebalancing, upgrades, and monitoring. Size on broker cores and peak throughput, plan partition counts and replication factor for your durability needs, and stand up proper monitoring (JMX/Prometheus) before cutover, Confluent’s Control Center was doing more than you might realize.

Proving no message loss at the seam

The acceptance bar is “no message loss, and ordering/delivery semantics preserved under load.” Run a throughput/latency benchmark, delivery-semantics and ordering tests, a consumer-failover and replay test, and a backpressure/soak test. Validate on a non-critical topic first, and keep the bridge running until parity is confirmed.

Pay particular attention to the boundary that MirrorMaker introduces. Cross-cluster mirroring is at-least-once, so a topic that relied on Confluent exactly-once needs an explicit check that consumers on the target deduplicate or tolerate the occasional replayed record at the seam. Confirm offset translation actually lands consumers where you expect by moving a test group across and watching where it resumes. Verify partition ordering is preserved for keyed topics, since a misconfigured mirror can spread a key across partitions and quietly break per-key order. Treat any schema-dependent topic as its own test: produce, mirror, and consume through the new registry so a mismatched schema ID surfaces in staging rather than in production.

What you’re really signing up for

Confluent → Apache Kafka keeps the protocol and clients while dropping the subscription; the work is replacing Confluent’s commercial add-ons (Schema Registry, connectors, ksqlDB, Control Center) and bridging with MirrorMaker 2 so nothing is lost. Repoint producers then consumers, drain lag, and cut over after soak. Model your per-core savings in the calculator above, and treat them as illustrative until you’ve scoped the add-on replacements and operational ownership.

Tooling & automation for this path

Stand up open-source Apache Kafka (KRaft); migrate topics/configs; mirror with MirrorMaker 2; repoint producers/consumers; cut over after lag drains.

Primary references: official Apache Kafka documentation ↗ and the Confluent Platform documentation ↗ , always verify version-specific behavior against them before you migrate.

Frequently asked questions

Do my Kafka producers and consumers need code changes to move from Confluent Platform to open-source Kafka?

The broker wire protocol and client APIs are identical, so most producers and consumers only change their bootstrap servers and security config, not their code. The exceptions are clients that depend on Confluent-specific pieces such as the Confluent Schema Registry serializers or commercial connectors. Repoint those to an open registry and open connectors before you switch the bootstrap addresses.

How does MirrorMaker 2 keep topics and consumer offsets in sync during the cutover?

MirrorMaker 2 replicates topics, their configs, and consumer group offsets from the Confluent cluster to the new Kafka cluster, and keeps them current while both run. It applies an offset translation so a consumer moved to the target resumes near where it left off rather than replaying from zero. Let it run until consumer lag on the target reaches zero before you retire the source.

How do I replace the Confluent Schema Registry without breaking existing schemas?

Stand up an open registry such as Apicurio and load your existing subjects and versions into it, preserving compatibility settings. Point producers and consumers at the new registry URL and confirm that serialization and deserialization still resolve the same schema IDs. Validate this on a non-critical topic first, since a mismatched ID or compatibility rule will surface as deserialization failures rather than data loss.

Can I keep exactly-once semantics after leaving Confluent Platform?

Exactly-once is a core Kafka feature, not a Confluent add-on, so idempotent producers and transactional writes continue to work on open-source Kafka. What you must re-verify is that your MirrorMaker bridge and cutover do not introduce duplicates at the boundary, since cross-cluster replication is at-least-once. Test transactional flows end to end on the target before you trust them under load.

Model your 3-year cost

Pre-filled for Confluent Platform → Apache Kafka; adjust every figure with your own numbers. Estimates are illustrative, not vendor quotes, see our methodology.

Sized at 96 broker cores, cost is computed on this.
Stay on Confluent Platform (3yr)
$115,200
Move to Apache Kafka (3yr + migration)
$68,640
Projected savings
$46,560 (40%)
Payback period
20.3 mo
Build a decision report from these numbers:

Illustrative, editable figures, not vendor pricing (defaults reviewed May 2026).

Request a vendor-accurate Apache Kafka quote

A guided builder that turns your estimates into a requirements report (RFQ) you can send to a vendor, partner, or distributor for a binding quote, then feed the real prices back into the calculator above. How our estimates work.

  1. 1Size it
  2. 2Requirements
  3. 3Your details
  4. 4Channels & export

How big is your Confluent Platform estate?

vSphere licenses physical cores across all hosts (16-core minimum per CPU). Not sure? Enter rough numbers, the distributor confirms exact counts later.

96 broker cores
Default mid-size assumption (96 broker cores)