今天就跟大家聊聊有关如何进行Docker下kafka的本地环境搭建,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
我们通过实战来学习如何编写这些脚本,搭建本地kafka环境;
本次实践会制作docker镜像,整个环境涉及到多个容器,我们先把它们全部列出来,再梳理一下之间的关系,如下图:
kafka sever提供消息服务; message producer的作用是产生执行主题的消息; message consumer的作用是订阅指定主题的消息并消费掉。
###zookeeper### zookeeper使用单机版,没什么需要定制的,因此直接使用官方镜像即可,daocloud.io/library/zookeeper:3.3.6
###kafka sever### 去hub.docker.com上搜索kafka,没看到官方标志的镜像,还是自己做一个吧,写Dockerfile之前先准备两个材料:kafka安装包和启动kafka的shell脚本;
kafka安装包用的是2.9.2-0.8.1版本,在 git@github.com:zq2599/docker_kafka.git中,请clone获取;
启动kafka server的shell脚本内容如下,很简单,在kafka的bin目录下执行脚本启动server即可:
#!/bin/bash
$WORK_PATH/$KAFKA_PACKAGE_NAME/bin/kafka-server-start.sh $WORK_PATH/$KAFKA_PACKAGE_NAME/config/server.properties
接下来可以编写Dockerfile了,如下:
# Docker image of kafka
# VERSION 0.0.1
# Author: bolingcavalry
#基础镜像使用tomcat,这样可以免于设置java环境
FROM daocloud.io/library/tomcat:7.0.77-jre8
#作者
MAINTAINER BolingCavalry <zq2599@gmail.com>
#定义工作目录
ENV WORK_PATH /usr/local/work
#定义kafka文件夹名称
ENV KAFKA_PACKAGE_NAME kafka_2.9.2-0.8.1
#创建工作目录
RUN mkdir -p $WORK_PATH
#把启动server的shell复制到工作目录
COPY ./start_server.sh $WORK_PATH/
#把kafka压缩文件复制到工作目录
COPY ./$KAFKA_PACKAGE_NAME.tgz $WORK_PATH/
#解压缩
RUN tar -xvf $WORK_PATH/$KAFKA_PACKAGE_NAME.tgz -C $WORK_PATH/
#删除压缩文件
RUN rm $WORK_PATH/$KAFKA_PACKAGE_NAME.tgz
#执行sed命令修改文件,将连接zk的ip改为link参数对应的zookeeper容器的别名
RUN sed -i 's/zookeeper.connect=localhost:2181/zookeeper.connect=zkhost:2181/g' $WORK_PATH/$KAFKA_PACKAGE_NAME/config/server.properties
#给shell赋予执行权限
RUN chmod a+x $WORK_PATH/start_server.sh
如脚本所示,操作并不复杂,复制解压kafka安装包,启动shell脚本,再把配置文件中zookeeper的ip改成link时zookeeper的别名;
Dockerfile编写完成后,和kafka_2.9.2-0.8.1.tgz以及start_server.sh放在同一个目录下,用控制台在此目录下执行:
docker build -t bolingcavalry/kafka:0.0.1 .
镜像构建成功后,新建一个目录编写docker-compose.yml脚本,如下:
version: '2'
services:
zk_server:
image: daocloud.io/library/zookeeper:3.3.6
restart: always
kafka_server:
image: bolingcavalry/kafka:0.0.1
links:
- zk_server:zkhost
command: /bin/sh -c '/usr/local/work/start_server.sh'
restart: always
message_producer:
image: bolingcavalry/kafka:0.0.1
links:
- zk_server:zkhost
- kafka_server:kafkahost
restart: always
message_consumer:
image: bolingcavalry/kafka:0.0.1
links:
- zk_server:zkhost
restart: always
docker-compose.yml中配置了四个容器:
zookeeper是官方的;
其他三个都是用刚刚制作的bolingcavalry/kafka做镜像生成的;
kafka_server在启动时执行了start_server.sh脚本把服务启动起来了;
message_producer和message_consumer都仅仅是将kafka环境安装好了,以便于通过命令行发送或者订阅消息,但是这两个容器本身并未启动server;
kafka_server,message_producer,message_consumer都通过link参数连接到了zookeeper容器,并且message_producer还连接到了kafka server,因为发送消息的时候会用到kafka server的ip地址;
现在打开终端,在docker-compose.yml所在目录下执行<font color="blue">docker-compose up -d</font>,即可启动所有容器。
看完上述内容,你们对如何进行Docker下kafka的本地环境搭建有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注天达云行业资讯频道,感谢大家的支持。