微信搜索superit|邀请体验:大数据, 数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

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

kafka aide_941 4℃

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

前言

网上有很多介绍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的节点值,也是kafkabrokerid
      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

#定义zookeeperData目录
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

#创建zookeeperData目录
RUN mkdir -p $ZK_DATA_PATH

#将jdkkafka添加到容器中
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

转载请注明:SuperIT » Docker 使用 docker-compose 搭建 zookeeper 和 kafka 集群

喜欢 (0)or分享 (0)