$ docker pull zookeeper:3.4
$ docker pull wurstmeister/kafka:1.1.0
$ docker network create --attachable --driver overlay --subnet 192.168.1.0/24 svc_net
$ export ZK_ID=1
$ docker service create --name zk$ZK_ID --mode global --hostname zk$ZK_ID \
--network svc_net --endpoint-mode dnsrr \
--mount type=bind,src=/data/zk/data,target=/data \
--constraint node.labels.zk==$ZK_ID \
--publish published=2080,target=8080,mode=host \
-e ZOO_MY_ID=$ZK_ID \
-e ZOO_SERVERS="server.1=tasks.zk1:2888:3888 server.2=tasks.zk2:2888:3888 server.3=tasks.zk3:2888:3888" \
-e JVMFLAGS="-Xmx256m" zookeeper:3.4
$ export ZK_ID=2
$ docker service create --name zk$ZK_ID --mode global --hostname zk$ZK_ID \
--network svc_net --endpoint-mode dnsrr \
--mount type=bind,src=/data/zk/data,target=/data \
--constraint node.labels.zk==$ZK_ID \
-e ZOO_ADMINSERVER_ENABLED=false \
-e ZOO_MY_ID=$ZK_ID \
-e ZOO_SERVERS="server.1=tasks.zk1:2888:3888 server.2=tasks.zk2:2888:3888 server.3=tasks.zk3:2888:3888" \
-e JVMFLAGS="-Xmx256m" zookeeper:3.4
$ export ZK_ID=3
$ docker service create --name zk$ZK_ID --mode global --hostname zk$ZK_ID \
--network svc_net --endpoint-mode dnsrr \
--mount type=bind,src=/data/zk/data,target=/data \
--constraint node.labels.zk==$ZK_ID \
-e ZOO_ADMINSERVER_ENABLED=false \
-e ZOO_MY_ID=$ZK_ID \
-e ZOO_SERVERS="server.1=tasks.zk1:2888:3888 server.2=tasks.zk2:2888:3888 server.3=tasks.zk3:2888:3888" \
-e JVMFLAGS="-Xmx256m" zookeeper:3.4
$ export ZK_ID=1
$ docker service create --name kf$ZK_ID --mode global --hostname kf$ZK_ID \
--constraint node.labels.zk==$ZK_ID \
--network svc_net --endpoint-mode dnsrr \
--publish published=9092,target=9092,mode=host \
--mount type=bind,src=/data/kf/data,target=/kafka \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://tasks.kf$ZK_ID:9092 \
-e KAFKA_BROKER_ID=$ZK_ID \
-e KAFKA_ZOOKEEPER_CONNECT="tasks.zk1:2181,tasks.zk2:2181,tasks.zk3:2181/kafka" \
wurstmeister/kafka:1.1.0
$ export ZK_ID=2
$ docker service create --name kf$ZK_ID --mode global --hostname kf$ZK_ID \
--constraint node.labels.zk==$ZK_ID \
--network svc_net --endpoint-mode dnsrr \
--publish published=9092,target=9092,mode=host \
--mount type=bind,src=/data/kf/data,target=/kafka \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://tasks.kf$ZK_ID:9092 \
-e KAFKA_BROKER_ID=$ZK_ID \
-e KAFKA_ZOOKEEPER_CONNECT="tasks.zk1:2181,tasks.zk2:2181,tasks.zk3:2181/kafka" \
wurstmeister/kafka:1.1.0
$ export ZK_ID=3
$ docker service create --name kf$ZK_ID --mode global --hostname kf$ZK_ID \
--constraint node.labels.zk==$ZK_ID \
--network svc_net --endpoint-mode dnsrr \
--publish published=9092,target=9092,mode=host \
--mount type=bind,src=/data/kf/data,target=/kafka \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://tasks.kf$ZK_ID:9092 \
-e KAFKA_BROKER_ID=$ZK_ID \
-e KAFKA_ZOOKEEPER_CONNECT="tasks.zk1:2181,tasks.zk2:2181,tasks.zk3:2181/kafka" \
wurstmeister/kafka:1.1.0