diff --git a/Dockerfile b/Dockerfile index ee8a56f7..e09e3847 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,11 +10,11 @@ ENV KAFKA_VERSION=$kafka_version \ KAFKA_HOME=/opt/kafka \ PATH=${PATH}:${KAFKA_HOME}/bin -COPY download-kafka.sh start-kafka.sh broker-list.sh create-topics.sh /tmp/ +COPY download-kafka.sh start-kafka.sh broker-list.sh create-topics.sh start-console-consumer.sh start-console-producer.sh /tmp/ RUN apk add --update unzip wget curl docker jq coreutils \ && chmod a+x /tmp/*.sh \ - && mv /tmp/start-kafka.sh /tmp/broker-list.sh /tmp/create-topics.sh /usr/bin \ + && mv /tmp/start-kafka.sh /tmp/broker-list.sh /tmp/create-topics.sh /tmp/start-console-consumer.sh /tmp/start-console-producer.sh /usr/bin \ && /tmp/download-kafka.sh \ && tar xfz /tmp/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz -C /opt \ && rm /tmp/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz \ diff --git a/README.md b/README.md index af80fa87..a78f382e 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ The image is available directly from [Docker Hub](https://hub.docker.com/r/wurst ## Pre-Requisites - install docker-compose [https://docs.docker.com/compose/install/](https://docs.docker.com/compose/install/) -- modify the ```KAFKA_ADVERTISED_HOST_NAME``` in ```docker-compose.yml``` to match your docker host IP (Note: Do not use localhost or 127.0.0.1 as the host ip if you want to run multiple brokers.) +- set an environment variable ```DOCKER_HOST_IP``` to match your docker host IP (Note: Do not use localhost or 127.0.0.1 as the host ip if you want to run multiple brokers.) - if you want to customize any Kafka parameters, simply add them as environment variables in ```docker-compose.yml```, e.g. in order to increase the ```message.max.bytes``` parameter set the environment to ```KAFKA_MESSAGE_MAX_BYTES: 2000000```. To turn off automatic topic creation set ```KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'``` - Kafka's log4j usage can be customized by adding environment variables prefixed with ```LOG4J_```. These will be mapped to ```log4j.properties```. For example: ```LOG4J_LOGGER_KAFKA_AUTHORIZER_LOGGER=DEBUG, authorizerAppender``` diff --git a/broker-list.sh b/broker-list.sh index 73aa8220..52775034 100755 --- a/broker-list.sh +++ b/broker-list.sh @@ -1,5 +1,5 @@ #!/bin/bash CONTAINERS=$(docker ps | grep 9092 | awk '{print $1}') -BROKERS=$(for CONTAINER in ${CONTAINERS}; do docker port "$CONTAINER" 9092 | sed -e "s/0.0.0.0:/$HOST_IP:/g"; done) +BROKERS=$(for CONTAINER in ${CONTAINERS}; do docker port "$CONTAINER" 9092 | sed -e "s/0.0.0.0:/$DOCKER_HOST_IP:/g"; done) echo "${BROKERS/$'\n'/,}" diff --git a/docker-compose-single-broker.yml b/docker-compose-single-broker.yml index 4d8e9f51..467e9e7c 100644 --- a/docker-compose-single-broker.yml +++ b/docker-compose-single-broker.yml @@ -9,7 +9,7 @@ services: ports: - "9092:9092" environment: - KAFKA_ADVERTISED_HOST_NAME: 192.168.99.100 + KAFKA_ADVERTISED_HOST_NAME: ${DOCKER_HOST_IP} KAFKA_CREATE_TOPICS: "test:1:1" KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 volumes: diff --git a/docker-compose.yml b/docker-compose.yml index 04b82c37..1ff824ce 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,7 +9,7 @@ services: ports: - "9092" environment: - KAFKA_ADVERTISED_HOST_NAME: 192.168.99.100 + KAFKA_ADVERTISED_HOST_NAME: ${DOCKER_HOST_IP} KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 volumes: - /var/run/docker.sock:/var/run/docker.sock diff --git a/start-console-consumer.sh b/start-console-consumer.sh new file mode 100644 index 00000000..1d144cca --- /dev/null +++ b/start-console-consumer.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# Use this script in a kafka shell instance to create a simple producer that reads from stdin and published to the given topic. + +if [[ -z "$1" ]]; then + echo 'Usage:' $0 '' + exit 1; +fi + +$KAFKA_HOME/bin/kafka-console-consumer.sh --topic=$1 --bootstrap-server=`broker-list.sh` diff --git a/start-console-producer.sh b/start-console-producer.sh new file mode 100644 index 00000000..86d1a216 --- /dev/null +++ b/start-console-producer.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# Use this script in a kafka shell instance to create a simple producer that reads from stdin and published to the given topic. + +if [[ -z "$1" ]]; then + echo 'Usage:' $0 '' + exit 1; +fi + +$KAFKA_HOME/bin/kafka-console-producer.sh --topic=$1 --broker-list=`broker-list.sh` \ No newline at end of file diff --git a/start-kafka-shell.sh b/start-kafka-shell.sh index 62663e49..d6c9f595 100755 --- a/start-kafka-shell.sh +++ b/start-kafka-shell.sh @@ -1,2 +1,2 @@ #!/bin/bash -docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -e HOST_IP=$1 -e ZK=$2 -i -t wurstmeister/kafka /bin/bash +docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -e DOCKER_HOST_IP=$DOCKER_HOST_IP -e ZK=DOCKER_HOST_IP:2181 -i -t wurstmeister/kafka /bin/bash