diff --git a/bitnami/kafka/1/debian-9/Dockerfile b/bitnami/kafka/1/debian-9/Dockerfile new file mode 100644 index 000000000000..c6a03853ce29 --- /dev/null +++ b/bitnami/kafka/1/debian-9/Dockerfile @@ -0,0 +1,52 @@ +FROM bitnami/minideb-extras:stretch-r70 +LABEL maintainer "Bitnami " + +ENV BITNAMI_PKG_CHMOD="-R g+rwX" \ + HOME="/" + +# Install required system packages and dependencies +RUN install_packages libblkid1 libbsd0 libc6 libffi6 libgcc1 libglib2.0-0 libmount1 libpcre3 libselinux1 libstdc++6 libuuid1 libx11-6 libxau6 libxcb1 libxdmcp6 libxext6 zlib1g +RUN bitnami-pkg install java-1.8.171-3 --checksum 100e1e457e19648410be57716eb075f43936aeaa2ac51457d2b46abc2b810ddc +RUN bitnami-pkg unpack kafka-1.1.0-4 --checksum e13b140f68d03f79bb40eb574736143d9377aa4e4753cf83072d3aeb4bed8a6c + +COPY rootfs / +ENV ALLOW_PLAINTEXT_LISTENER="no" \ + BITNAMI_APP_NAME="kafka" \ + BITNAMI_IMAGE_VERSION="1.1.0-debian-9-r2" \ + KAFKA_ADVERTISED_LISTENERS="PLAINTEXT://:9092" \ + KAFKA_BROKER_ID="-1" \ + KAFKA_BROKER_PASSWORD="bitnami" \ + KAFKA_BROKER_USER="user" \ + KAFKA_CERTIFICATE_PASSWORD="" \ + KAFKA_DELETE_TOPIC_ENABLE="false" \ + KAFKA_HEAP_OPTS="-Xmx1024m -Xms1024m" \ + KAFKA_INTER_BROKER_PASSWORD="bitnami" \ + KAFKA_INTER_BROKER_USER="admin" \ + KAFKA_LISTENERS="PLAINTEXT://:9092" \ + KAFKA_LOGS_DIRS="/opt/bitnami/kafka/data" \ + KAFKA_LOG_FLUSH_INTERVAL_MESSAGES="10000" \ + KAFKA_LOG_FLUSH_INTERVAL_MS="1000" \ + KAFKA_LOG_MESSAGE_FORMAT_VERSION="" \ + KAFKA_LOG_RETENTION_BYTES="1073741824" \ + KAFKA_LOG_RETENTION_CHECK_INTERVALS_MS="300000" \ + KAFKA_LOG_RETENTION_HOURS="168" \ + KAFKA_NUM_IO_THREADS="8" \ + KAFKA_NUM_NETWORK_THREADS="3" \ + KAFKA_NUM_PARTITIONS="1" \ + KAFKA_NUM_RECOVERY_THREADS_PER_DATA_DIR="1" \ + KAFKA_PORT_NUMBER="9092" \ + KAFKA_SEGMENT_BYTES="1073741824" \ + KAFKA_SOCKET_RECEIVE_BUFFER_BYTES="102400" \ + KAFKA_SOCKET_REQUEST_MAX_BYTES="104857600" \ + KAFKA_SOCKET_SEND_BUFFER_BYTES="102400" \ + KAFKA_ZOOKEEPER_CONNECT="localhost:2181" \ + KAFKA_ZOOKEEPER_CONNECT_TIMEOUT_MS="6000" \ + KAFKA_ZOOKEEPER_PASSWORD="" \ + KAFKA_ZOOKEEPER_USER="" \ + PATH="/opt/bitnami/java/bin:/opt/bitnami/kafka/bin:$PATH" + +EXPOSE 9092 + +USER 1001 +ENTRYPOINT ["/app-entrypoint.sh"] +CMD ["/run.sh"] diff --git a/bitnami/kafka/1/debian-9/docker-compose.yml b/bitnami/kafka/1/debian-9/docker-compose.yml new file mode 100644 index 000000000000..474368f84ba9 --- /dev/null +++ b/bitnami/kafka/1/debian-9/docker-compose.yml @@ -0,0 +1,26 @@ +version: '2' + +services: + zookeeper: + image: 'bitnami/zookeeper:latest' + ports: + - '2181:2181' + volumes: + - 'zookeeper_data:/bitnami' + environment: + - ALLOW_ANONYMOUS_LOGIN=yes + kafka: + image: 'bitnami/kafka:1' + ports: + - '9092:9092' + volumes: + - 'kafka_data:/bitnami' + environment: + - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 + - ALLOW_PLAINTEXT_LISTENER=yes + +volumes: + zookeeper_data: + driver: local + kafka_data: + driver: local diff --git a/bitnami/kafka/1/debian-9/rootfs/app-entrypoint.sh b/bitnami/kafka/1/debian-9/rootfs/app-entrypoint.sh new file mode 100755 index 000000000000..6605f4a9719e --- /dev/null +++ b/bitnami/kafka/1/debian-9/rootfs/app-entrypoint.sh @@ -0,0 +1,14 @@ +#!/bin/bash -e + +. /opt/bitnami/base/functions +. /opt/bitnami/base/helpers + +print_welcome_page + +if [[ "$1" == "nami" && "$2" == "start" ]] || [[ "$1" == "/run.sh" ]]; then + . /init.sh + nami_initialize kafka + info "Starting kafka... " +fi + +exec tini -- "$@" diff --git a/bitnami/kafka/1/debian-9/rootfs/init.sh b/bitnami/kafka/1/debian-9/rootfs/init.sh new file mode 100644 index 000000000000..d89dcc306918 --- /dev/null +++ b/bitnami/kafka/1/debian-9/rootfs/init.sh @@ -0,0 +1,23 @@ +## +## @brief Helper function to show an error when KAFKA_LISTENERS does not configure a secure listener +## param $1 Input name +## +plaintext_listener_error() { + error "The $1 environment variable does not set a secure listener. Set the environment variable ALLOW_PLAINTEXT_LISTENER=yes to allow the container to be started with a plaintext listener. This is recommended only for development." + exit 1 +} + +## +## @brief Helper function to show a warning when the ALLOW_PLAINTEXT_LISTENER flag is enabled +## +plaintext_listener_enabled_warn() { + warn "You set the environment variable ALLOW_PLAINTEXT_LISTENER=${ALLOW_PLAINTEXT_LISTENER}. For safety reasons, do not use this flag in a production environment." +} + + +# Validate passwords +if [[ "$ALLOW_PLAINTEXT_LISTENER" =~ ^(yes|Yes|YES)$ ]]; then + plaintext_listener_enabled_warn +elif [[ ! "$KAFKA_LISTENERS" =~ SASL_SSL ]]; then + plaintext_listener_error KAFKA_LISTENERS +fi diff --git a/bitnami/kafka/1/debian-9/rootfs/kafka-inputs.json b/bitnami/kafka/1/debian-9/rootfs/kafka-inputs.json new file mode 100644 index 000000000000..6f2eeae1c83a --- /dev/null +++ b/bitnami/kafka/1/debian-9/rootfs/kafka-inputs.json @@ -0,0 +1,33 @@ +{ + "allowPlaintextListener": "{{$global.env.ALLOW_PLAINTEXT_LISTENER}}", + "kafkaAdvertisedListeners": "{{$global.env.KAFKA_ADVERTISED_LISTENERS}}", + "kafkaBrokerId": "{{$global.env.KAFKA_BROKER_ID}}", + "kafkaBrokerPassword": "{{$global.env.KAFKA_BROKER_PASSWORD}}", + "kafkaBrokerUser": "{{$global.env.KAFKA_BROKER_USER}}", + "kafkaCertificatePassword": "{{$global.env.KAFKA_CERTIFICATE_PASSWORD}}", + "kafkaDeleteTopicEnable": "{{$global.env.KAFKA_DELETE_TOPIC_ENABLE}}", + "kafkaHeapOpts": "{{$global.env.KAFKA_HEAP_OPTS}}", + "kafkaInterBrokerPassword": "{{$global.env.KAFKA_INTER_BROKER_PASSWORD}}", + "kafkaInterBrokerUser": "{{$global.env.KAFKA_INTER_BROKER_USER}}", + "kafkaListeners": "{{$global.env.KAFKA_LISTENERS}}", + "kafkaLogFlushIntervalMessages": "{{$global.env.KAFKA_LOG_FLUSH_INTERVAL_MESSAGES}}", + "kafkaLogFlushIntervalMs": "{{$global.env.KAFKA_LOG_FLUSH_INTERVAL_MS}}", + "kafkaLogMessageFormatVersion": "{{$global.env.KAFKA_LOG_MESSAGE_FORMAT_VERSION}}", + "kafkaLogRetentionBytes": "{{$global.env.KAFKA_LOG_RETENTION_BYTES}}", + "kafkaLogRetentionCheckIntervalMs": "{{$global.env.KAFKA_LOG_RETENTION_CHECK_INTERVALS_MS}}", + "kafkaLogRetentionHours": "{{$global.env.KAFKA_LOG_RETENTION_HOURS}}", + "kafkaLogSegmentBytes": "{{$global.env.KAFKA_SEGMENT_BYTES}}", + "kafkaLogsDirs": "{{$global.env.KAFKA_LOGS_DIRS}}", + "kafkaNumIoThreads": "{{$global.env.KAFKA_NUM_IO_THREADS}}", + "kafkaNumNetworkThreads": "{{$global.env.KAFKA_NUM_NETWORK_THREADS}}", + "kafkaNumPartitions": "{{$global.env.KAFKA_NUM_PARTITIONS}}", + "kafkaNumRecoveryThreadsPerDataDir": "{{$global.env.KAFKA_NUM_RECOVERY_THREADS_PER_DATA_DIR}}", + "kafkaPort": "{{$global.env.KAFKA_PORT_NUMBER}}", + "kafkaSocketReceiveBufferBytes": "{{$global.env.KAFKA_SOCKET_RECEIVE_BUFFER_BYTES}}", + "kafkaSocketRequestMaxBytes": "{{$global.env.KAFKA_SOCKET_REQUEST_MAX_BYTES}}", + "kafkaSocketSendBufferBytes": "{{$global.env.KAFKA_SOCKET_SEND_BUFFER_BYTES}}", + "kafkaZookeeperConnect": "{{$global.env.KAFKA_ZOOKEEPER_CONNECT}}", + "kafkaZookeeperConnectionTimeoutMs": "{{$global.env.KAFKA_ZOOKEEPER_CONNECT_TIMEOUT_MS}}", + "kafkaZookeeperPassword": "{{$global.env.KAFKA_ZOOKEEPER_PASSWORD}}", + "kafkaZookeeperUser": "{{$global.env.KAFKA_ZOOKEEPER_USER}}" +} \ No newline at end of file diff --git a/bitnami/kafka/1/debian-9/rootfs/run.sh b/bitnami/kafka/1/debian-9/rootfs/run.sh new file mode 100755 index 000000000000..5f34ce94edce --- /dev/null +++ b/bitnami/kafka/1/debian-9/rootfs/run.sh @@ -0,0 +1,30 @@ +#!/bin/bash +. /opt/bitnami/base/functions +. /opt/bitnami/base/helpers + + +USER=kafka +KAFKA_HOME="/opt/bitnami/kafka" +START_COMMAND="${KAFKA_HOME}/bin/kafka-server-start.sh -daemon ${KAFKA_HOME}/config/server.properties && ps ax | grep -i 'java.*kafka' | grep -v grep | awk '{print \$1}' > ${KAFKA_HOME}/tmp/kafka.pid && tail -f ${KAFKA_HOME}/logs/server.log" + +if [[ -z "$KAFKA_BROKER_ID" ]]; then + if [[ -n "$BROKER_ID_COMMAND" ]]; then + export KAFKA_BROKER_ID=$(eval $BROKER_ID_COMMAND) + else + # By default auto allocate broker ID + export KAFKA_BROKER_ID=-1 + fi +fi + +if [[ "$KAFKA_LISTENERS" =~ SASL ]]; then + export KAFKA_OPTS="-Djava.security.auth.login.config=${KAFKA_HOME}/conf/kafka_jaas.conf" +fi + +# If container is started as `root` user +if [ $EUID -eq 0 ]; then + gosu ${USER} touch ${KAFKA_HOME}/logs/server.log + exec gosu ${USER} bash -c "${START_COMMAND}" +else + touch ${KAFKA_HOME}/logs/server.log + exec bash -c "${START_COMMAND}" +fi diff --git a/bitnami/kafka/README.md b/bitnami/kafka/README.md index 0991b25a8b0e..3a6657b243b6 100644 --- a/bitnami/kafka/README.md +++ b/bitnami/kafka/README.md @@ -41,7 +41,7 @@ services: # Supported tags and respective `Dockerfile` links * [`1-ol-7`, `1.1.0-ol-7-r17` (1/ol-7/Dockerfile)](https://github.com/bitnami/bitnami-docker-kafka/blob/1.1.0-ol-7-r17/1/ol-7/Dockerfile) -* [`1-debian-9`, `1.1.0-debian-9-r1` (1/debian-9/Dockerfile)](https://github.com/bitnami/bitnami-docker-kafka/blob/1.1.0-debian-9-r1/1/debian-9/Dockerfile) +* [`1-debian-9`, `1.1.0-debian-9-r2` (1/debian-9/Dockerfile)](https://github.com/bitnami/bitnami-docker-kafka/blob/1.1.0-debian-9-r2/1/debian-9/Dockerfile) * [`1-debian-8`, `1.1.0-debian-8-r57`, `1`, `1.1.0`, `1.1.0-r57`, `latest` (1/Dockerfile)](https://github.com/bitnami/bitnami-docker-kafka/blob/1.1.0-debian-8-r57/1/Dockerfile) Subscribe to project updates by watching the [bitnami/kafka GitHub repo](https://github.com/bitnami/bitnami-docker-kafka).