// Bitnami alternatives / kafka

Bitnami Apache Kafka alternative
Replacing bitnamilegacy/kafka

The bitnamilegacy/kafka image has had about 14.3 million pulls since Bitnami moved it to the legacy repository, and it receives no updates. Switching to the official apache/kafka image means changing environment variables and the data path. Get either wrong and the new container starts empty.

Trusted globally by enterprises

Henry ScheinEnbridgeGojekMicrosoft

Bitnami Apache Kafka variables and their official equivalents

Bitnami Apache Kafka image to official apache/kafka:

SettingBitnamiOfficial image
Any broker propertyKAFKA_CFG_<PROPERTY> (for example KAFKA_CFG_NODE_ID)KAFKA_<PROPERTY> (for example KAFKA_NODE_ID)
KRaft rolesKAFKA_CFG_PROCESS_ROLESKAFKA_PROCESS_ROLES
Controller quorumKAFKA_CFG_CONTROLLER_QUORUM_BOOTSTRAP_SERVERSKAFKA_CONTROLLER_QUORUM_BOOTSTRAP_SERVERS
Data path/bitnami/kafkalog.dirs as configured

What breaks when you switch

  • Every KAFKA_CFG_ variable has to be renamed. Missing one silently falls back to a default.
  • Bitnami's client and broker credential helpers (KAFKA_CLIENT_USERS, KAFKA_CLIENT_PASSWORDS) have no official equivalent; configure JAAS and SASL directly.
  • The official apache/kafka image covers current releases. ZooKeeper-mode 3.x clusters need either a migration to KRaft or a maintained 3.x image.

bitnami/kafka Helm chart values the drop-in image reads

How the bitnami/kafka chart configures brokers depends on its major version. Up to 23.x it runs one StatefulSet and passes broker settings as KAFKA_CFG_* environment variables. From 24.x it splits nodes into <release>-controller and <release>-broker StatefulSets, and a kafka-init init container, started from the same image, writes the server.properties that the broker mounts at /opt/bitnami/kafka/config/server.properties. Both designs rely on the Bitnami entrypoint and paths, which the OSSeva image keeps. The values below are from chart 31.x, the last line for Kafka 3.9.

Chart valueWhat the chart passes to the container
controller.replicaCount, controller.controllerOnlyPods in <release>-controller: 3 by default, each acting as controller and broker unless controllerOnly is true
broker.replicaCountBroker-only pods in <release>-broker, 0 by default
kraft.clusterId or kraft.existingClusterIdSecretKAFKA_KRAFT_CLUSTER_ID
sasl.client.users, sasl.client.passwordsKAFKA_CLIENT_USERS, KAFKA_CLIENT_PASSWORDS
sasl.interbroker.user, sasl.interbroker.passwordKAFKA_INTER_BROKER_USER, KAFKA_INTER_BROKER_PASSWORD, when the inter-broker listener uses SASL
sasl.controller.user, sasl.controller.passwordKAFKA_CONTROLLER_USER, KAFKA_CONTROLLER_PASSWORD, when the controller listener uses SASL
listeners.*, extraConfig, controller.extraConfig, broker.extraConfigLines in the server.properties that kafka-init renders
controller.persistence.mountPath, broker.persistence.mountPathData volume at /bitnami/kafka

Apache Kafka versions OSSeva publishes

Each line below has a patched OSSeva image. The second column shows which bitnami/kafka chart releases defaulted to that line, which tells you the chart major to stay on during the swap.

Version lineBitnami chart releases
Kafka 2.8bitnami/kafka 13.x and 14.x, plus the last 12.x releases
Kafka 3.0 and 3.1bitnami/kafka 15.x and 16.x
Kafka 3.2bitnami/kafka 17.x and 18.x
Kafka 3.3bitnami/kafka 19.x and early 20.x
Kafka 3.4bitnami/kafka later 20.x, 21.x and 22.x
Kafka 3.5bitnami/kafka 23.x to 25.x
Kafka 3.6bitnami/kafka 26.x
Kafka 3.7bitnami/kafka 27.x to 29.x
Kafka 3.8bitnami/kafka 30.x
Kafka 3.9bitnami/kafka 31.x, the last chart line that can run ZooKeeper

Replication and high availability in the Apache Kafka charts

KRaft is the default from chart 22.x to 31.x. From 24.x the quorum is the three controller-eligible pods in <release>-controller, which also serve clients unless controller.controllerOnly is true. Adding broker.replicaCount gives broker-only pods for more capacity.

ZooKeeper mode needs kraft.enabled set to false, then either zookeeper.enabled set to true, which installs the bitnami/zookeeper subchart, or a list in externalZookeeper.servers. The chart rejects ZooKeeper mode unless broker.replicaCount is at least 1 and controller.replicaCount is 0. It also rejects KRaft and ZooKeeper together, unless controller.zookeeperMigrationMode or broker.zookeeperMigrationMode is on for a migration.

Chart 32.x moves to Kafka 4.0 and drops the zookeeper subchart and the externalZookeeper values. A ZooKeeper-mode cluster has to stay on 31.x or earlier until it has moved to KRaft.

What happened to the Bitnami Apache Kafka image

For years, bitnami/kafka on Docker Hub was one of the most common ways to deploy Apache Kafka on Kubernetes, usually through the Bitnami Apache Kafka Helm chart. On 28 August 2025 Broadcom moved every versioned Bitnami container image, including this one, to the bitnamilegacy repository, and removed the public docker.io/bitnami catalog on 29 September 2025. The free tier now offers only latest tags of a limited set of images for development.

The legacy Docker image still pulls, so existing deployments keep working. It no longer receives updates, which means every vulnerability disclosed since the move stays open in the Apache Kafka binary, in the base image and in every bundled dependency. Container scanners will report a growing count at every audit, and a workload that depends on a frozen public repository is one registry change away from ImagePullBackOff.

How to migrate Apache Kafka off Bitnami safely

  1. Find every reference to bitnami/kafka and bitnamilegacy/kafka in running workloads, Helm values files and CI pipelines, including init containers.
  2. Record the Apache Kafka version each deployment pins. Versions past upstream end of life are not covered by the free open source images.
  3. Take a backup and test a restore before touching a stateful workload.
  4. Mirror the replacement container images into your own registry, and scan them before you deploy.
  5. Move one replica or one environment at a time, and confirm the data path, file ownership and credentials on the new image.
  6. Remove every remaining legacy reference so nothing falls back to the archive on the next deploy.

Your options

OSSeva drop-in image

A patched image that keeps Bitnami's variables, paths and user, covering Kafka 2.8 to 3.9, including ZooKeeper-mode clusters. Your chart keeps working after a registry change.

Official apache/kafka image

Free and maintained for current versions. Apply the mapping above and move the volume.

Strimzi

A CNCF operator for Kafka on Kubernetes, and the common replacement for the Bitnami kafka chart.

Bitnami Secure Images

Broadcom's paid catalog keeps the Bitnami layout for supported versions, sold within TrueSource.

Repoint the Bitnami Apache Kafka Helm chart

  1. Run helm list to record the chart version, then helm get values <release> to save what is deployed.
  2. Keep that chart major. Each Kafka line maps to its own chart majors (see the table), and 32.x removes ZooKeeper.
  3. Override image.registry, image.repository and image.tag. With zookeeper.enabled, override zookeeper.image as well, since the subchart pulls its own image.
  4. On chart 31.1.0 and later, set global.security.allowInsecureImages to true. Bitnami added that check in December 2024; earlier releases do not have it.
  5. Run helm upgrade with --reuse-values and the override. When the rollout finishes, kafka-topics.sh --describe --under-replicated-partitions should return nothing.
# values-osseva.yaml
# helm upgrade my-kafka oci://registry-1.docker.io/bitnamicharts/kafka \
#   --version 31.5.0 --reuse-values -f values-osseva.yaml
image:
  registry: registry.example.com   # OSSeva registry or your mirror of it
  repository: kafka
  tag: "<3.9.x tag>"
zookeeper:                         # only when zookeeper.enabled is true
  image:
    registry: registry.example.com
    repository: zookeeper
    tag: "<zookeeper tag>"
global:
  imagePullSecrets:
    - registry-credentials
  security:
    allowInsecureImages: true      # checked by chart 31.1.0 and later

This works only with an image that keeps Bitnami's layout. With the official image, rewrite the chart or move to an operator. See replacing bitnamilegacy images for the full inventory and rollout steps.

Frequently asked questions

What is the best alternative to the Bitnami Apache Kafka image?

To keep the Bitnami Apache Kafka Helm chart unchanged, use a Bitnami-compatible image; OSSeva ships patched ones covering Kafka 2.8 to 3.9, including ZooKeeper-mode clusters. To rewrite the deployment, use the official apache/kafka image or Strimzi.

Is bitnamilegacy/kafka still getting security updates?

No. Bitnami moved versioned images to the bitnamilegacy repository on 28 August 2025 and describes it as receiving no further updates. It had about 14.3 million pulls by September 2026.

Can I keep using the Bitnami Apache Kafka Helm chart?

Yes, with a maintained image that keeps Bitnami's layout. Set image.registry and image.repository in your values file, and set global.security.allowInsecureImages to true, because recent Bitnami charts refuse non-Bitnami images otherwise.

Is Bitnami no longer free?

Not for production. Since 28 August 2025, versioned Bitnami images live in the bitnamilegacy repository with no updates, and the free tier offers latest tags of a limited set of images for development. Maintained, versioned images are sold as Bitnami Secure Images, which Broadcom prices by quote.

Where does the Bitnami Apache Kafka image store data?

Under /bitnami/kafka. The official image uses log.dirs as configured, so the volume mount must change when you switch images.

Keep your Apache Kafka chart. Change the image.

Send us your image list and versions; we reply with coverage and a migration plan within five working days.