| #!/usr/bin/env bash |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to You under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| ensure() { |
| if [[ -z "${!1}" ]]; then |
| echo "$1 environment variable not set" |
| exit 1 |
| fi |
| } |
| |
| path() { |
| if [[ $2 == "writable" ]]; then |
| if [[ ! -w "$1" ]]; then |
| echo "$1 file not writable" |
| exit 1 |
| fi |
| elif [[ $2 == "existence" ]]; then |
| if [[ ! -e "$1" ]]; then |
| echo "$1 file does not exist" |
| exit 1 |
| fi |
| fi |
| } |
| |
| # unset KAFKA_ADVERTISED_LISTENERS from ENV in KRaft mode when running as controller only |
| if [[ -n "${KAFKA_PROCESS_ROLES-}" ]] |
| then |
| echo "Running in KRaft mode..." |
| ensure CLUSTER_ID |
| if [[ $KAFKA_PROCESS_ROLES == "controller" ]] |
| then |
| if [[ -n "${KAFKA_ADVERTISED_LISTENERS-}" ]] |
| then |
| echo "KAFKA_ADVERTISED_LISTENERS is not supported on a KRaft controller." |
| exit 1 |
| else |
| # Unset in case env variable is set with empty value |
| unset KAFKA_ADVERTISED_LISTENERS |
| fi |
| fi |
| fi |
| |
| # By default, LISTENERS is derived from ADVERTISED_LISTENERS by replacing |
| # hosts with 0.0.0.0. This is good default as it ensures that the broker |
| # process listens on all ports. |
| if [[ -z "${KAFKA_LISTENERS-}" ]] && ( [[ -z "${KAFKA_PROCESS_ROLES-}" ]] || [[ $KAFKA_PROCESS_ROLES != "controller" ]] ) && [[ -n "${KAFKA_ADVERTISED_LISTENERS-}" ]] |
| then |
| export KAFKA_LISTENERS |
| KAFKA_LISTENERS=$(echo "$KAFKA_ADVERTISED_LISTENERS" | sed -e 's|://[^:]*:|://0.0.0.0:|g') |
| fi |
| |
| path /opt/kafka/config/ writable |
| |
| # Set if ADVERTISED_LISTENERS has SSL:// or SASL_SSL:// endpoints. |
| if [[ -n "${KAFKA_ADVERTISED_LISTENERS-}" ]] && [[ $KAFKA_ADVERTISED_LISTENERS == *"SSL://"* ]] |
| then |
| echo "SSL is enabled." |
| |
| ensure KAFKA_SSL_KEYSTORE_FILENAME |
| export KAFKA_SSL_KEYSTORE_LOCATION="/etc/kafka/secrets/$KAFKA_SSL_KEYSTORE_FILENAME" |
| path "$KAFKA_SSL_KEYSTORE_LOCATION" existence |
| |
| ensure KAFKA_SSL_KEY_CREDENTIALS |
| KAFKA_SSL_KEY_CREDENTIALS_LOCATION="/etc/kafka/secrets/$KAFKA_SSL_KEY_CREDENTIALS" |
| path "$KAFKA_SSL_KEY_CREDENTIALS_LOCATION" existence |
| export KAFKA_SSL_KEY_PASSWORD |
| KAFKA_SSL_KEY_PASSWORD=$(cat "$KAFKA_SSL_KEY_CREDENTIALS_LOCATION") |
| |
| ensure KAFKA_SSL_KEYSTORE_CREDENTIALS |
| KAFKA_SSL_KEYSTORE_CREDENTIALS_LOCATION="/etc/kafka/secrets/$KAFKA_SSL_KEYSTORE_CREDENTIALS" |
| path "$KAFKA_SSL_KEYSTORE_CREDENTIALS_LOCATION" existence |
| export KAFKA_SSL_KEYSTORE_PASSWORD |
| KAFKA_SSL_KEYSTORE_PASSWORD=$(cat "$KAFKA_SSL_KEYSTORE_CREDENTIALS_LOCATION") |
| |
| if [[ -n "${KAFKA_SSL_CLIENT_AUTH-}" ]] && ( [[ $KAFKA_SSL_CLIENT_AUTH == *"required"* ]] || [[ $KAFKA_SSL_CLIENT_AUTH == *"requested"* ]] ) |
| then |
| ensure KAFKA_SSL_TRUSTSTORE_FILENAME |
| export KAFKA_SSL_TRUSTSTORE_LOCATION="/etc/kafka/secrets/$KAFKA_SSL_TRUSTSTORE_FILENAME" |
| path "$KAFKA_SSL_TRUSTSTORE_LOCATION" existence |
| |
| ensure KAFKA_SSL_TRUSTSTORE_CREDENTIALS |
| KAFKA_SSL_TRUSTSTORE_CREDENTIALS_LOCATION="/etc/kafka/secrets/$KAFKA_SSL_TRUSTSTORE_CREDENTIALS" |
| path "$KAFKA_SSL_TRUSTSTORE_CREDENTIALS_LOCATION" existence |
| export KAFKA_SSL_TRUSTSTORE_PASSWORD |
| KAFKA_SSL_TRUSTSTORE_PASSWORD=$(cat "$KAFKA_SSL_TRUSTSTORE_CREDENTIALS_LOCATION") |
| fi |
| fi |
| |
| # Set if KAFKA_ADVERTISED_LISTENERS has SASL_PLAINTEXT:// or SASL_SSL:// endpoints. |
| if [[ -n "${KAFKA_ADVERTISED_LISTENERS-}" ]] && [[ $KAFKA_ADVERTISED_LISTENERS =~ .*SASL_.*://.* ]] |
| then |
| echo "SASL" is enabled. |
| |
| ensure KAFKA_OPTS |
| |
| if [[ ! $KAFKA_OPTS == *"java.security.auth.login.config"* ]] |
| then |
| echo "KAFKA_OPTS should contain 'java.security.auth.login.config' property." |
| fi |
| fi |
| |
| if [[ -n "${KAFKA_JMX_OPTS-}" ]] |
| then |
| if [[ ! $KAFKA_JMX_OPTS == *"com.sun.management.jmxremote.rmi.port"* ]] |
| then |
| echo "KAFKA_OPTS should contain 'com.sun.management.jmxremote.rmi.port' property. It is required for accessing the JMX metrics externally." |
| fi |
| fi |