Managed Apache Kafka hosting

Data and streamingOn-prem or your region

Event streaming from the Apache Software Foundation, run as a KRaft cluster beside the systems that produce your events rather than in a vendor's cloud. Pilae runs it on your own servers, or in Zurich, Switzerland, and eleven other Pilae Cloud regions.

Talk to us about Apache Kafka

Licence
Apache-2.0
Runs on
Your own hardware, or any of 10+ Pilae regions — six of them in Switzerland and the EU
Upgrades
Pinned, tested against your configuration, applied in your window
Upstream
kafka.apache.org

Running Apache Kafka in production: what it takes

  1. Format the quorum, then the brokers

    Three KRaft controllers on machines of their own, and at least three brokers from a pinned Apache release, each with broker.rack set to the rack or room it sits in. Topics default to three replicas with min.insync.replicas at 2, and automatic topic creation is off, so every topic exists because someone defined it.

  2. Encrypt every listener, one identity per application

    TLS between clients, brokers and controllers. Applications authenticate with SASL/SCRAM or with OAuth tokens issued by Keycloak, and the built-in StandardAuthorizer refuses whatever no ACL allows. Each application gets ACLs on its own topics and consumer groups, and nothing else.

  3. Run Connect and MirrorMaker 2 as clusters of their own

    Kafka Connect runs in distributed mode, with connector configurations and offsets kept in compacted topics on the cluster, and only the connector plugins you approved in its image. MirrorMaker 2 runs where a second site needs a copy of the data.

  4. Alert on replication, not only on the port

    Probes reach every listener every 60 seconds. Beside them we track under-replicated partitions, partitions under min.insync.replicas and the lag of each consumer group. An engineer is alerted when a partition drops under its minimum, because from then on producers using acks=all, the default, get errors instead of acknowledgements.

  5. Roll upgrades, then raise the metadata version

    Each broker stops with a controlled shutdown, which moves its partition leadership elsewhere first, and the next one waits until every partition is fully replicated again. The Pilae Agent tests the upgrade on a copy, and raises metadata.version with kafka-features.sh only once the whole cluster runs the new release and you approve, because a metadata version that brings metadata changes cannot be downgraded.

What Apache Kafka is, and who runs it

Self-hosted Apache Kafka for event streaming

Apache Kafka is an event streaming platform from the Apache Software Foundation. Applications write records to topics, Kafka keeps them on disk for as long as each topic’s retention allows, and any number of consumers read them at their own pace, each keeping its own position. Kafka Connect moves data in and out through connectors, from database change capture to object storage, and Kafka Streams processes it inside your own applications.

It suits organisations where several systems need the same events: orders, payments, sensor readings, changes to a database. If two applications only need a queue between them, Kafka is more than they need, and we say so. Heavier stream processing goes to Apache Flink. Kafka belongs next to the systems that produce the events, so that is where we put it: on your own hardware, or in the Pilae Cloud region that already holds them, one of 10+, six of them in Switzerland and the EU.

Apache Kafka in production: the quorum, the replicas and the upgrades

Current Kafka runs without ZooKeeper. Three KRaft controllers keep the cluster metadata and the brokers keep the data, on separate machines as upstream advises. Every topic has three replicas on three racks with min.insync.replicas at 2, so a broker or a rack can go while producers keep writing. Every listener is encrypted and answers only on your private network. Applications sign in with SCRAM or with tokens from Keycloak, and each has ACLs on its own topics and consumer groups.

Replicas are not a backup: a deleted topic is gone from every broker at once. Topic definitions, ACLs and the schema registry’s PostgreSQL database are backed up daily, encrypted, to your chosen country, and topics that must outlive their retention are copied to Garage or to a second cluster. Our monitoring probes every listener every 60 seconds and alerts an engineer when a partition falls below its in-sync minimum or a consumer group stops keeping up. Upgrades roll one broker at a time, and the Pilae Agent raises metadata.version only after you approve, because that step cannot always be undone.

Apache Kafka licence and editions

Kafka is Apache-2.0 with no paid edition, so there is no broker count to pay for. What grows around it is less uniform: Confluent’s Schema Registry server, ksqlDB and several of its connectors are under the Confluent Community License. We run Apicurio Registry, which is Apache-2.0, and check every connector’s licence before it goes into the image. Our operation follows the published plans. Talk to us about the topics you want to bring across from Confluent Cloud.

The code in the apache/kafka repository is Apache-2.0, and there is no paid build of it: KRaft, Kafka Connect, MirrorMaker 2, Kafka Streams and ACLs are all in the release we deploy. Confluent, which IBM acquired on 17 March 2026, sells Confluent Platform and Confluent Cloud under its own terms, and some components that come with them, such as the Schema Registry server and ksqlDB, are under the Confluent Community License rather than Apache-2.0. You do not need any of them for anything on this page. Apache Kafka, Kafka and the Kafka logo are trademarks of the Apache Software Foundation, which does not endorse this service.

Apache Kafka system requirements

Before anything is deployed, this is what has to exist. We size it with you in the first session, and we say so when your own hardware is already enough.

KRaft controllers
3 dedicated nodesThey hold the cluster metadata in a replicated log, and three tolerate one failure. Upstream does not recommend combining the controller and broker roles in critical deployments, so controllers get small machines of their own.
Brokers
3+ nodes · broker.rack setOne rack or room per replica, so a partition with three replicas spans three of them. Upstream advises a cluster per datacentre rather than one cluster stretched over a slow link, so a second site gets a cluster of its own.
CPU and memory
4 vCPU · 16 GB per brokerOur starting point. The JVM heap stays near the 6 GB of upstream's example settings, and the rest is left to the operating system's page cache, which Kafka relies on instead of a cache of its own.
Data disks
Dedicated volumes · XFSDisk throughput is usually the limit, so Kafka data does not share disks with the system or its logs. Upstream reports better results on XFS than on ext4, asks for at least 100,000 file descriptors per broker, and vm.max_map_count is raised to suit the partition count.
Java runtime
Java, a current LTS releaseBrokers, Connect and the tools need a recent Java LTS release, and upstream recommends the most recent one. Java clients run on older releases than the brokers accept.
Schema registry
Apicurio Registry · PostgreSQLOnly where applications use Avro, Protobuf or JSON Schema. Apicurio is Apache-2.0 and recommends PostgreSQL storage in production; its default in-memory database loses everything on restart.

Migrating from Confluent Cloud to Apache Kafka

Applications keep the Kafka protocol and their client libraries, so for most of them the move is a new bootstrap address, a new credential and a new schema registry URL. Topics and their data cross with MirrorMaker 2, set to keep topic names as they are, and consumer group offsets are translated on the way. A translated offset lands at or before where the group stopped, never after it, so a consumer may read some records twice and has to tolerate it. Service accounts and API keys stay behind, and MirrorMaker copies topic ACLs without their write access, so each application gets a new identity and ACLs written for it. Schemas move to Apicurio Registry with the IDs that existing records already carry. Fully managed connectors, Flink statements and ksqlDB queries do not move at all: they are rebuilt on Kafka Connect, Kafka Streams or Apache Flink, and that list, more than the data, sets the timetable.

  1. List what Confluent Cloud does besides storing topics

    Topics, consumer groups, service accounts and their ACLs, schemas, fully managed connectors, Flink statements and ksqlDB queries. The last three do not travel with the data, and the list decides how long the rest takes.

  2. Move the schemas first, with their IDs

    A record written with Confluent's serializers carries its schema ID in its first bytes. Apicurio's export utility for Confluent Schema Registry produces an archive that is imported into an empty registry, and mirrored records are decoded through it before any consumer moves. Clients keep Confluent's serializers and point schema.registry.url at Apicurio's Confluent-compatible API.

  3. Mirror the topics with their names

    A dedicated MirrorMaker 2 cluster beside the new one replicates from the earliest retained offset with the identity replication policy, so topic names stay the same and every group can have its offsets translated. Topic configurations follow; ACLs are written fresh.

  4. Move consumers, then producers

    A consumer group is stopped on Confluent Cloud, MirrorMaker writes its translated offsets to the new cluster once its next checkpoint and offset sync have run, each every minute by default, and the group starts there. Producers move last, once the mirror has caught up, and the Confluent Cloud cluster is kept until its owners sign off.

  5. Rebuild connectors and stream jobs

    Each fully managed connector becomes a self-managed one on Kafka Connect, checked for its licence first: several of Confluent's own connectors are under the Confluent Community License. Flink statements move to Apache Flink, and ksqlDB queries to Flink or Kafka Streams.

A rolling broker upgrade, one rack at a time

kafka · acme-events · zur114 lines

infopre-check: 3 brokers on racks r1, r2, r3; under-replicated 0, under min ISR 0

info[BrokerLifecycleManager id=4] Beginning controlled shutdown.

info[BrokerLifecycleManager id=4] The controller has asked us to exit controlled shutdown.

info[BrokerServer id=4] shut down completed

info[BrokerLifecycleManager id=4] The broker has been unfenced. Transitioning from RECOVERY to RUNNING.

info[KafkaRaftServer nodeId=4] Kafka Server started

infokafka-topics.sh --describe --under-replicated-partitions: no output, ISR back to 3 of 3

info[BrokerLifecycleManager id=5] Beginning controlled shutdown.

infobroker 5 running on the new release, ISR back to 3 of 3

info[BrokerLifecycleManager id=6] Beginning controlled shutdown.

infobroker 6 running on the new release, ISR back to 3 of 3

infoleaders back on preferred replicas, test produce and consume on every listener: ok

infoall 6 nodes on the new release, consumer lag at baseline, finalise approved by acme

infokafka-features.sh upgrade: metadata.version raised to the new release

An example upgrade window on acme's cluster in Zurich: controllers are nodes 1 to 3, and brokers 4, 5 and 6 sit on racks r1, r2 and r3. Each broker hands its partition leadership over with a controlled shutdown before it stops. With three replicas and min.insync.replicas at 2, producers keep writing while it is away. The next broker waits until no partition is under-replicated, and metadata.version is raised only once the whole cluster runs the new release and acme has approved.

What Pilae is responsible for

A pinned version

A version we have run, not whatever latest resolves to that day.

A runbook

What it depends on, how it fails, what to do about it. In your repository.

A restore drill

Backups restored on a schedule. A backup nobody has restored is a file.

A patch window

Security updates in a window you agreed, with a rollback ready.

Someone watching

Every endpoint probed on the minute. An alert reaches a person, not a dashboard nobody opens.

Where it runs
zur1, fra1, fal1, gra1, ams1, hel1, lon1, ash1, hil1, sin1, tok1, syd1, on-premZurich, Frankfurt, Falkenstein, Gravelines, Amsterdam, Helsinki, London, Ashburn, Hillsboro, Singapore, Tokyo, Sydney, Your own hardware
Who holds the credentials
You do. Ours are separate, named, logged and revocable with one command. We ask before anything changes outside an agreed window.
If you leave
The machine, the data, the compose files and the runbook are already yours. Nothing stops when our access does.

What running Apache Kafka costs

Apache Kafka starts on Business, because it needs dedicated hardware. On Business, it is one of up to three apps for CHF 1,590EUR 1,690USD 1,990 a month, on your own servers or in Pilae Cloud. Enterprise is quoted. The plans set what each includes; these are the inputs that move the price around them.

Instance size
The CPU, memory and, where a model runs, the GPUs the app needs for your users and your data.
High availability
One machine with tested restores, or a replicated setup that keeps serving when a node fails.
Storage and backups
How much data it holds, how long backups are kept, and point-in-time recovery for its database.
Plan and support
Starter, Business or Enterprise: support hours, response times in the contract and how often we review the service with you.
Region
Your own hardware, where the infrastructure is already yours, or a Pilae Cloud region, where machines are priced per month. On Starter, Pilae chooses the site.
Sign-on and integrations
Single sign-on, directory sync, mail relays and the other systems the app has to reach.

Apache Kafka: common questions

Is Apache Kafka open source?

Yes. It is Apache-2.0 and a project of the Apache Software Foundation, and the release we deploy holds nothing back for a paid edition. Confluent, an IBM company since March 2026, sells Confluent Platform and Confluent Cloud, which are separate products you do not need. Some components around Kafka are not Apache-2.0: Confluent's Schema Registry server and ksqlDB are under the Confluent Community License, which excludes offering them as an online service that competes with Confluent, so we run Apicurio Registry instead.

What happens when a broker or a whole rack fails?

With three replicas on three racks and min.insync.replicas at 2, losing one broker or one rack leaves two copies in sync, leadership moves to them, and producers keep writing. Losing two racks at once leaves one copy, and writes with acks=all, the default, are refused rather than acknowledged on a single copy. Unclean leader election stays off, its default, so a replica that had fallen behind is never made leader at the cost of lost records.

Where do our events live?

On the brokers, in the site you choose: your own hardware, or a Pilae region such as Zurich or Frankfurt, in ISO 27001-certified datacentres. All three replicas stay in that site. Upstream advises against stretching one cluster across distant datacentres, so a second site gets its own cluster and MirrorMaker 2 copies only the topics you name to it.

Can we keep our Confluent clients and serializers?

Yes. Kafka clients speak the same protocol whoever publishes them. Confluent's Avro serializer is Apache-2.0; its Protobuf and JSON Schema serializers are too, but each depends on a library under the Confluent Community License, which restricts offering a competing online service, not using it in your own applications. All three work with Apicurio Registry through its Confluent-compatible API, so the change is the schema.registry.url. The exception is very old clients: current brokers have dropped the oldest protocol versions, so a client that old is upgraded first.

We still run Kafka on ZooKeeper. Can we move to a current release?

Not in one step. Current Kafka releases run only in KRaft mode, so a ZooKeeper cluster first moves to the last release line that supports both and is migrated to KRaft there, with controllers added beside the running brokers. Until the migration is finalised it can go back to ZooKeeper; after that it cannot, and the move to a current release is then an ordinary rolling upgrade.

Also in data and streaming

Back to apps

Bring us your Apache Kafka. We will tell you what it takes.

Thirty minutes on the deployment you already have, or the one you are about to start.