在上一章《 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的消息發佈訂閱服務。