Skip to content

Instantly share code, notes, and snippets.

@spacelatte
Last active January 29, 2020 11:56
Show Gist options
  • Save spacelatte/cd3da9a2e6784c52758805f6ab8ec55e to your computer and use it in GitHub Desktop.
Save spacelatte/cd3da9a2e6784c52758805f6ab8ec55e to your computer and use it in GitHub Desktop.
#!/usr/bin/env -S docker-compose -p kafka -f
version: "3.5"
networks:
default:
driver: bridge
internal: false
external: false
services:
nodes:
image: pvtmert/confluent
#entrypoint: sh -c
command: kafkanet
restart: "no"
privileged: false
stdin_open: false
tty: false
build:
context: ./
dockerfile: confluent.dockerfile
args: {}
networks:
default:
aliases:
- kafkanet
expose:
- 2181
- 9092
labels:
- traefik.http.routers.web.rule=Host("nodes.kafka.docker.localhost")
deploy:
endpoint_mode: dnsrr
mode: replicated
replicas: 3
placement:
constraints: []
preferences: []
healthcheck:
test: timeout 10 bash -c 'cat </dev/null >/dev/tcp/0/9092'
interval: 1m
timeout: 10s
retries: 3
gateway:
image: traefik
restart: "no"
command: --api.insecure=true --providers.docker
networks:
- default
ports:
- 80:80
- 8080:8080
volumes:
- /var/run/docker.sock:/var/run/docker.sock
#!/usr/bin/env -S docker build --compress -t pvtmert/confluent -f
FROM centos:7
# https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz
ENV JAVA_HOME="/usr/java"
RUN mkdir -p "${JAVA_HOME}"; \
curl -#L "https://download.java.net/openjdk/jdk11/ri/openjdk-11+28_linux-x64_bin.tar.gz" \
| tar --strip=1 -zxC "${JAVA_HOME}"
ENV CONFLUENT_HOME="/home/confluent"
RUN mkdir -p "${CONFLUENT_HOME}" ; \
curl -#L "https://packages.confluent.io/archive/5.3/confluent-community-5.3.2-2.12.tar.gz" \
| tar --strip=1 -zxC "${CONFLUENT_HOME}"
ENV CONFLUENT_DATA="${CONFLUENT_HOME}/data"
ENV PATH "${PATH}:${JAVA_HOME}/bin:${CONFLUENT_HOME}/bin"
RUN yum install -y bind-utils which
COPY confluent.init.sh init.sh
ENTRYPOINT [ "bash", "init.sh" ]
CMD [ ]
EXPOSE \
2181 \
2888 \
3888 \
9092 \
#!/usr/bin/env bash
#ID="${2}"
DNS="${1}"
DIG="$(which dig)"
INIT=".init.kafka"
FQDN=$(hostname -f)
: ${DNS:?name is required}
IP=$(hostname -i)
ID=$(dig +short "${DNS}" | sort -Vr | grep -n "${IP}" | cut -d: -f1 | head -1)
FQDN=$(dig +short -x "${IP}")
: ${ID?of broker is necessary}
: ${DNS?host is necessary}
: ${CONFLUENT_HOME?is missing}
: ${CONFLUENT_DATA?is missing}
: ${DIG?is required to discover hosts}
FQDN=${FQDN%%.}
function start {
"zookeeper-server-start" ${CONFLUENT_HOME}/etc/kafka/zookeeper.properties || exit &
"kafka-server-start" ${CONFLUENT_HOME}/etc/kafka/server.properties || exit &
dig +short -x "${IP}" | printf "My PTR is: %s\n" "$(cat)"
hostname -A | printf "My FQDN is: %s\n" "$(cat)"
wait
}
test -e "${INIT}" && {
start
exit
}
touch "${INIT}"
mkdir -p "${CONFLUENT_DATA}"
echo "${ID:-0}" | tee "${CONFLUENT_DATA}/myid"
tee "${CONFLUENT_HOME}/etc/kafka/zookeeper.properties" <<EOF
dataDir=${CONFLUENT_DATA}
tickTime=2000
initLimit=50
syncLimit=20
clientPort=2181
autopurge.snapRetainCount=3
autopurge.purgeInterval=24
#server.0=0.0.0.0:2888:3888
EOF
for ip in $("${DIG}" +short "${DNS}" | sort -Vr); do
echo "server.$((++counter))=${ip}:2888:3888"
done \
| sed "s:${IP}:0.0.0.0:g" \
| tee -a "${CONFLUENT_HOME}/etc/kafka/zookeeper.properties"
unset counter
#echo "--------"
#cat "${CONFLUENT_HOME}/etc/kafka/zookeeper.properties"
#echo "--------"
tee -a "${CONFLUENT_HOME}/etc/kafka/server.properties" <<EOF
advertised.listeners=PLAINTEXT://${IP}:9092
zookeeper.connect=${FQDN}:2181
broker.id=${ID:-0}
EOF
start
exit
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment