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.
- 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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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
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?
What happens when a broker or a whole rack fails?
Where do our events live?
Can we keep our Confluent clients and serializers?
We still run Kafka on ZooKeeper. Can we move to a current release?
Also in data and streaming
PostgreSQL
Managed PostgreSQL on dedicated machines in Switzerland, the EU or your own datacentre, with backups you can restore to the minute and upgrades you approve.
Replaces Amazon RDS, Azure Database for PostgreSQL
Garage
S3-compatible object storage that keeps every object in three zones, on your own hardware or in the Pilae regions you choose.
Replaces Amazon S3, MinIO, Wasabi
Apache Superset
Business intelligence from the Apache Software Foundation for data teams that write SQL, run next to your warehouse in Switzerland, the EU or your own datacentre.
Replaces Tableau, Power BI
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.