Docker 使用 docker-compose 搭建 zookeeper 和 kafka 集群

娟子 for 通付盾科技 · 2018年09月12日 · 2485 次阅读

前言

网上有很多介绍 zookeeper 和 kafka 的集群搭建方法,同时官网中也有相应的 zookeeper 和 kafka 的镜像,但是试了很多 zookeeper 和 kafka 分开不同的容器链接的时候总是有这样那样的问题,同时由于我们公司使用 zookeeper 的只是为了 kafka,虚拟机中都是将 kafka 和 zookeeper 放在同一容器中,同时由于版本需要保持一致,故想自己重新定义镜像然后同时开启 3 个容器,每个容器中分别开启 zookeeper 和 kafka 的服务

docker-compose 开启集群方法

#使用命令:

docker-compose -f stack.yml up -d

stack.yml 文件内容

version: '3.1'
services:
  zkl_31:
    image: zookafka:2.12     #使用的镜像
    restart: always
    hostname: zkl_31    #设置容器的hostname
    container_name: zkl_31    #容器名称,方便在rancher中显示有意义的名称
    ports:
      - 2184:2184    #将本容器的zookeeper默认端口号映射出去
      - 9095:9095    #将kafka的端口号映射出去
    environment:     #环境变量的一些设置
      ZOO_MY_ID: 1    #即是zookeeper的节点值,也是kafka的brokerid值
      ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=zkl_32:2888:3888 server.3=zkl_33:2888:3888    #zookeeper中设置的集群链接地址
>       ZK_CONNECT: 192.168.109.102:2184,192.168.109.102:2185,192.168.109.102:2186  #kafka中的链接zookeeper的地址,==标记下个人感觉这个ip地址也可以设置成hostname,目前还没有试试,以后有时间可以试下。==

  zkl_32:
    image: zookafka:2.12
    restart: always
    hostname: zkl_32
    container_name: zkl_32
    ports:
      - 2185:2184
      - 9096:9095
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zkl_31:2888:3888 server.2=0.0.0.0:2888:38 server.3=zkl_33:2888:3888
      ZK_CONNECT: 192.168.109.102:2184,192.168.109.102:2185,192.168.109.102:2186
  zkl_33:
    image: zookafka:2.12
    restart: always
    hostname: zkl_33
    container_name: zkl_33
    ports:
      - 2186:2184
      - 9097:9095
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zkl_31:2888:3888 server.2=zkl_32:2888:3888 server.3=0.0.0.0:2888:3888
      ZK_CONNECT: 192.168.109.102:2184,192.168.109.102:2185,192.168.109.102:2186

zookafka:2.12 镜像的制作方法

#基础镜像使用kinogmt/centos-ssh:6.7,这里面已经装好了ssh,密码是password

FROM 192.168.109.81:5000/centos7.2

#作者
MAINTAINER JUAN.ZI

#定义工作目录
ENV WORK_PATH /usr/local/work

#定义日志目录
ENV LOG_PATH /usr/local/work/logs

#定义zookeeper的Data目录
ENV ZK_DATA_PATH $WORK_PATH/zkdata

#定义jdk1.8的文件夹
ENV JDK_PACKAGE_FILE jdk1.8.0_144

#定义jdk1.8的文件名
ENV JAVA_HOME=$WORK_PATH/jdk1.8.0_71
#定义java环境变量

ENV JAVA_HOME=$WORK_PATH/jdk1.8.0_71
#定义java环境变量
ENV PATH=$JAVA_HOME/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

#创建工作目录
RUN mkdir -p $WORK_PATH

#创建日志目录
RUN mkdir -p $LOG_PATH

#创建zookeeper的Data目录
RUN mkdir -p $ZK_DATA_PATH

#将jdk和kafka添加到容器中
ADD /jdk-tomcat/jdk-8u71-linux-x64.tar.gz /usr/local/work
ADD /jdk-tomcat/kafka_2.12-1.1.0.tar.gz /usr/local/work

COPY run2.sh ${WORK_PATH}

CMD ["/usr/local/work/run2.sh"]

run2.sh 文件内容

此部分脚本主要功能是:将 compose 中设置的变量内容更新到 zookeeper 和 kafka 的配置文件中,没有研究过 kafka 的 zookeeper 的链接地址要求,感觉此部分可以直接用 hostname 进行连接,以后有时间再试下。另外可能还有更简单的 kafaka 集群配置方法,自己还没找到,先用这种笨方法来做吧。

#!/bin/bash
ZK_HOME="/usr/local/work/kafka_2.12-1.1.0"  #设置zookeeper的home路径
ZK_CONF="${ZK_HOME}/config/zookeeper.properties"  #设置zookeeper的配置文件路径
ZK_DATA="/usr/local/work/zkdata"     #设置zookeeper数据存放路径
ZK_CONF_TXT="tickTime=2000\ninitLimit=10\nsyncLimit=5\ndataDir=${ZK_DATA}\nclientPort=2181" #在zookeeper的配置文件中增加此配置项
#CON_IP=`sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
#echo "ip=${CON_IP}"
echo "zookeeper is start"
#echo "args in compose ${ZK_CONF},${ZOO_MY_ID},${ZOO_SERVERS},${ZK_CONF_TXT}"
echo -e ${ZK_CONF_TXT} >${ZK_CONF}
#将zooserver换行添加到zookeeper的配置文件中
for i in ${ZOO_SERVERS}
do
echo "$i" >>${ZK_CONF}
done
echo "${ZOO_MY_ID}" >${ZK_DATA}/myid
echo "kafka_brokerid=${ZOO_MY_ID},CONNET=${ZK_CONNECT}"
sed -i "s/0/${ZOO_MY_ID}/g" /usr/local/work/kafka_2.12-1.1.0/config/server.properties |grep "broker.id" #设置kafka的brokerid
sed -i "s/localhost:2181/${ZK_CONNECT}/g" /usr/local/work/kafka_2.12-1.1.0/config/server.properties |grep "zookeeper.connect"    #设置kafka链接zookeeper的配置
echo `cat /usr/local/work/kafka_2.12-1.1.0/config/server.properties |grep "zookeeper.connect"`
echo "*******************************"
echo `cat  /usr/local/work/kafka_2.12-1.1.0/config/server.properties |grep "broker.id"`
#后台启动zookeeper
echo "*******start zookeeper*******"
nohup ${ZK_HOME}/bin/zookeeper-server-start.sh ${ZK_HOME}/config/zookeeper.properties > zookeeper.log &
echo "启动kafka"
/usr/local/work/kafka_2.12-1.1.0/bin/kafka-server-start.sh /usr/local/work/kafka_2.12-1.1.0/config/server.properties

参考文档:http://kafka.apache.org/quickstart

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册