|
| 1 | +#!/usr/bin/env bash |
| 2 | + |
| 3 | +# This script will either start the kafka server, or run the user |
| 4 | +# specified command. |
| 5 | + |
| 6 | +# Exit immediately if a pipeline returns a non-zero status. |
| 7 | +set -e |
| 8 | + |
| 9 | +KAFKA_HOME=/opt/kafka |
| 10 | +KAFKA_EXE=${KAFKA_HOME}/bin/kafka-server-start.sh |
| 11 | +KAFKA_SERVER_PROPERTIES=${KAFKA_HOME}/config/server.properties |
| 12 | + |
| 13 | +# handle starting the kafka server with an option |
| 14 | +# (genericly handled, but only --override known to me at this time) |
| 15 | +if [ "${1:0:1}" = '-' ]; then |
| 16 | + set -- ${KAFKA_EXE} ${KAFKA_SERVER_PROPERTIES} "$@" |
| 17 | +fi |
| 18 | + |
| 19 | +# handle default (i.e. no custom options or commands) |
| 20 | +if [ "$1" = "${KAFKA_EXE}" ]; then |
| 21 | + |
| 22 | + # add the server.properties to the command |
| 23 | + set -- ${KAFKA_EXE} ${KAFKA_SERVER_PROPERTIES} |
| 24 | + |
| 25 | + # compute the advertised host name if a command was specified |
| 26 | + if [[ -z ${KAFKA_ADVERTISED_HOST_NAME} && -n ${KAFKA_ADVERTISED_HOST_NAME_COMMAND} ]] ; then |
| 27 | + export KAFKA_ADVERTISED_HOST_NAME=$(eval ${KAFKA_ADVERTISED_HOST_NAME_COMMAND}) |
| 28 | + fi |
| 29 | + |
| 30 | + # compute the advertised port if a command was specified |
| 31 | + if [[ -z ${KAFKA_ADVERTISED_PORT} && -n ${KAFKA_ADVERTISED_PORT_COMMAND} ]] ; then |
| 32 | + export KAFKA_ADVERTISED_PORT=$(eval ${KAFKA_ADVERTISED_PORT_COMMAND}) |
| 33 | + fi |
| 34 | + |
| 35 | + # default to auto set the broker id |
| 36 | + if [ -z "$KAFKA_BROKER_ID" ] ; then |
| 37 | + export KAFKA_BROKER_ID=-1 |
| 38 | + fi |
| 39 | + |
| 40 | + # update server.properties by searching for envinroment variables named |
| 41 | + # KAFKA_* and converting them to properties in the kafka server properties file. |
| 42 | + for ENV_ENTRY in $(env | grep "^KAFKA_") ; do |
| 43 | + # skip some entries that should do not belong in server.properties |
| 44 | + if [[ $ENV_ENTRY =~ ^KAFKA_HOME= ]] ; then continue ; fi |
| 45 | + if [[ $ENV_ENTRY =~ ^KAFKA_EXE= ]] ; then continue ; fi |
| 46 | + if [[ $ENV_ENTRY =~ ^KAFKA_SERVER_PROPERTIES= ]] ; then continue ; fi |
| 47 | + if [[ $ENV_ENTRY =~ ^KAFKA_ADVERTISED_HOST_NAME_COMMAND= ]] ; then continue ; fi |
| 48 | + if [[ $ENV_ENTRY =~ ^KAFKA_ADVERTISED_PORT_COMMAND= ]] ; then continue ; fi |
| 49 | + # transform KAFKA_XXX_YYY to xxx.yyy |
| 50 | + KAFKA_PROPERTY_NAME="$(echo ${ENV_ENTRY%%=*} | sed -e 's/^KAFKA_//;s/_/./g' | tr '[:upper:]' '[:lower:]')" |
| 51 | + # get property value |
| 52 | + KAFKA_PROPERTY_VALUE="${ENV_ENTRY#*=}" |
| 53 | + # update server.properties |
| 54 | + if grep -q "^\s*#\?\s*${KAFKA_PROPERTY_NAME}" ${KAFKA_SERVER_PROPERTIES} ; then |
| 55 | + # the property is already defined (maybe even commented out), so edit the file |
| 56 | + sed -i -e "s|^\s*${KAFKA_PROPERTY_NAME}\s*=.*$|${KAFKA_PROPERTY_NAME}=${KAFKA_PROPERTY_VALUE}|" ${KAFKA_SERVER_PROPERTIES} |
| 57 | + sed -i -e "s|^\s*#\s*${KAFKA_PROPERTY_NAME}\s*=.*$|${KAFKA_PROPERTY_NAME}=${KAFKA_PROPERTY_VALUE}|" ${KAFKA_SERVER_PROPERTIES} |
| 58 | + else |
| 59 | + echo "${KAFKA_PROPERTY_NAME}=${KAFKA_PROPERTY_VALUE}">>${KAFKA_SERVER_PROPERTIES} |
| 60 | + fi |
| 61 | + done |
| 62 | +fi |
| 63 | + |
| 64 | +exec "$@" |
0 commit comments