在上一章《 Docker下kafka学习,三部曲之一:极速体验kafka》中咱们快速体验了kafka的消息分发和订阅功能,可是对环境搭建的印象仅仅是执行了几个命令和脚本,本章咱们经过实战来学习如何编写这些脚本,搭建本地kafka环境;java
本次实践会制做docker镜像,所用的材料请在此获取:https://github.com/zq2599/docker_kafkagit
整个环境涉及到多个容器,咱们先把它们所有列出来,再梳理一下之间的关系,以下图:程序员
kafka sever提供消息服务; message producer的做用是产生执行主题的消息; message consumer的做用是订阅指定主题的消息并消费掉。github
###zookeeper### zookeeper使用单机版,没什么须要定制的,所以直接使用官方镜像便可,daocloud.io/library/zookeeper:3.3.6docker
###kafka sever### 去hub.docker.com上搜索kafka,没看到官方标志的镜像,仍是本身作一个吧,写Dockerfile以前先准备两个材料:kafka安装包和启动kafka的shell脚本;shell
kafka安装包用的是2.9.2-0.8.1版本,在 git@github.com:zq2599/docker_kafka.git中,请clone获取;tomcat
启动kafka server的shell脚本内容以下,很简单,在kafka的bin目录下执行脚本启动server便可:bash
#!/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的别名;ui
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中配置了四个容器:
如今打开终端,在docker-compose.yml所在目录下执行<font color="blue">docker-compose up -d</font>,便可启动全部容器;
至此,本地环境搭建已经成功了,咱们能够经过命令行体验kafka的消息发布订阅服务,具体的命令能够参考上一章《 Docker下kafka学习,三部曲之一:极速体验kafka》。
以上就是本地搭建kafka的全过程,下一章咱们开发java应用来体验kafka的消息发布订阅服务。