diff --git a/bitnami/kafka/4.1/debian-12/Dockerfile b/bitnami/kafka/4.1/debian-12/Dockerfile index 104e223bd95d..584ebd7fab12 100644 --- a/bitnami/kafka/4.1/debian-12/Dockerfile +++ b/bitnami/kafka/4.1/debian-12/Dockerfile @@ -8,7 +8,7 @@ ARG JAVA_EXTRA_SECURITY_DIR="/bitnami/java/extra-security" ARG TARGETARCH LABEL org.opencontainers.image.base.name="docker.io/bitnami/minideb:bookworm" \ - org.opencontainers.image.created="2025-12-09T13:16:38Z" \ + org.opencontainers.image.created="2025-12-18T15:23:58Z" \ org.opencontainers.image.description="Application packaged by Broadcom, Inc." \ org.opencontainers.image.documentation="https://github.com/bitnami/containers/tree/main/bitnami/kafka/README.md" \ org.opencontainers.image.source="https://github.com/bitnami/containers/tree/main/bitnami/kafka" \ @@ -53,7 +53,7 @@ RUN /opt/bitnami/scripts/java/postunpack.sh RUN /opt/bitnami/scripts/kafka/postunpack.sh ENV APP_VERSION="4.1.1" \ BITNAMI_APP_NAME="kafka" \ - IMAGE_REVISION="3" \ + IMAGE_REVISION="4" \ JAVA_HOME="/opt/bitnami/java" \ PATH="/opt/bitnami/java/bin:/opt/bitnami/kafka/bin:$PATH" diff --git a/bitnami/kafka/4.1/debian-12/rootfs/opt/bitnami/scripts/kafka-env.sh b/bitnami/kafka/4.1/debian-12/rootfs/opt/bitnami/scripts/kafka-env.sh index 215660c41db2..76ddb039f49f 100644 --- a/bitnami/kafka/4.1/debian-12/rootfs/opt/bitnami/scripts/kafka-env.sh +++ b/bitnami/kafka/4.1/debian-12/rootfs/opt/bitnami/scripts/kafka-env.sh @@ -29,6 +29,7 @@ kafka_env_vars=( KAFKA_CFG_CONTROLLER_QUORUM_BOOTSTRAP_SERVERS KAFKA_INITIAL_CONTROLLERS KAFKA_SKIP_KRAFT_STORAGE_INIT + KAFKA_KRAFT_VERSION KAFKA_CFG_SASL_ENABLED_MECHANISMS KAFKA_CLIENT_LISTENER_NAME KAFKA_OPTS @@ -90,6 +91,7 @@ export KAFKA_CLUSTER_ID="${KAFKA_CLUSTER_ID:-}" export KAFKA_CFG_CONTROLLER_QUORUM_BOOTSTRAP_SERVERS="${KAFKA_CFG_CONTROLLER_QUORUM_BOOTSTRAP_SERVERS:-localhost:9093}" export KAFKA_INITIAL_CONTROLLERS="${KAFKA_INITIAL_CONTROLLERS:-}" export KAFKA_SKIP_KRAFT_STORAGE_INIT="${KAFKA_SKIP_KRAFT_STORAGE_INIT:-false}" +export KAFKA_KRAFT_VERSION="${KAFKA_KRAFT_VERSION:-1}" # Kafka configuration overrides export KAFKA_CFG_SASL_ENABLED_MECHANISMS="${KAFKA_CFG_SASL_ENABLED_MECHANISMS:-PLAIN,SCRAM-SHA-256,SCRAM-SHA-512}" diff --git a/bitnami/kafka/4.1/debian-12/rootfs/opt/bitnami/scripts/libkafka.sh b/bitnami/kafka/4.1/debian-12/rootfs/opt/bitnami/scripts/libkafka.sh index 503808f081a5..9eabf0e13da0 100644 --- a/bitnami/kafka/4.1/debian-12/rootfs/opt/bitnami/scripts/libkafka.sh +++ b/bitnami/kafka/4.1/debian-12/rootfs/opt/bitnami/scripts/libkafka.sh @@ -118,6 +118,24 @@ kafka_is_zookeeper_supported() { return 1 } +######################## +# Returns true if dynamic controller quorum is supported +# Globals: +# None +# Arguments: +# None +# Returns: +# true/false +######################### +kafka_is_dynamic_controller_quorum_supported() { + major_version="$(get_sematic_version "$(kafka_get_version)" 1)" + minor_version="$(get_sematic_version "$(kafka_get_version)" 2)" + if ([[ "$major_version" -eq "3" ]] && [[ "$minor_version" -ge "9" ]]) || ([[ "$major_version" -ge "4" ]]); then + return + fi + return 1 +} + ######################## # Returns true if at least one listener is configured using SSL # Globals: @@ -896,7 +914,7 @@ kafka_kraft_storage_initialize() { args+=("--add-scram" "SCRAM-SHA-512=[name=${KAFKA_CONTROLLER_USER},password=${KAFKA_CONTROLLER_PASSWORD}]") fi fi - if [[ "${KAFKA_CFG_PROCESS_ROLES:-}" =~ "controller" ]]; then + if kafka_is_dynamic_controller_quorum_supported && [[ "${KAFKA_CFG_PROCESS_ROLES:-}" =~ "controller" ]] && [[ "${KAFKA_KRAFT_VERSION:-}" -eq "1" ]]; then args+=("--feature=kraft.version=1") if [[ -n "${KAFKA_INITIAL_CONTROLLERS:-}" ]]; then args+=("--initial-controllers=${KAFKA_INITIAL_CONTROLLERS}") diff --git a/bitnami/kafka/README.md b/bitnami/kafka/README.md index c294fdd2dc42..d3221f70d1dd 100644 --- a/bitnami/kafka/README.md +++ b/bitnami/kafka/README.md @@ -185,6 +185,7 @@ docker-compose up -d | `KAFKA_CFG_CONTROLLER_QUORUM_BOOTSTRAP_SERVERS` | List of endpoints to use for bootstrapping the cluster metadata. | `localhost:9093` | | `KAFKA_INITIAL_CONTROLLERS` | List of Kafka cluster initial controllers. | `nil` | | `KAFKA_SKIP_KRAFT_STORAGE_INIT` | If set to true, skip Kraft storage initialization when process.roles are configured. | `false` | +| `KAFKA_KRAFT_VERSION` | Configure dynamic or static controller cluster. | `1` | | `KAFKA_CFG_SASL_ENABLED_MECHANISMS` | Kafka `sasl.enabled.mechanisms` configuration override. | `PLAIN,SCRAM-SHA-256,SCRAM-SHA-512` | | `KAFKA_CLIENT_LISTENER_NAME` | Name of the listener intended to be used by clients, if set, configures the producer/consumer accordingly. | `nil` | | `KAFKA_OPTS` | Kafka deployment options. | `nil` |