今天就跟大家聊聊有關(guān)如何進行Docker下kafka的本地環(huán)境搭建,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
德陽網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
我們通過實戰(zhàn)來學(xué)習(xí)如何編寫這些腳本,搭建本地kafka環(huán)境;
本次實踐會制作docker鏡像,整個環(huán)境涉及到多個容器,我們先把它們?nèi)苛谐鰜恚偈崂硪幌轮g的關(guān)系,如下圖:
kafka sever提供消息服務(wù); message producer的作用是產(chǎn)生執(zhí)行主題的消息; message consumer的作用是訂閱指定主題的消息并消費掉。
###zookeeper### zookeeper使用單機版,沒什么需要定制的,因此直接使用官方鏡像即可,daocloud.io/library/zookeeper:3.3.6
###kafka sever### 去hub.docker.com上搜索kafka,沒看到官方標(biāo)志的鏡像,還是自己做一個吧,寫Dockerfile之前先準(zhǔn)備兩個材料:kafka安裝包和啟動kafka的shell腳本;
kafka安裝包用的是2.9.2-0.8.1版本,在 git@github.com:zq2599/docker_kafka.git中,請clone獲??;
啟動kafka server的shell腳本內(nèi)容如下,很簡單,在kafka的bin目錄下執(zhí)行腳本啟動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 #基礎(chǔ)鏡像使用tomcat,這樣可以免于設(shè)置java環(huán)境 FROM daocloud.io/library/tomcat:7.0.77-jre8 #作者 MAINTAINER BolingCavalry#定義工作目錄 ENV WORK_PATH /usr/local/work #定義kafka文件夾名稱 ENV KAFKA_PACKAGE_NAME kafka_2.9.2-0.8.1 #創(chuàng)建工作目錄 RUN mkdir -p $WORK_PATH #把啟動server的shell復(fù)制到工作目錄 COPY ./start_server.sh $WORK_PATH/ #把kafka壓縮文件復(fù)制到工作目錄 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 #執(zhí)行sed命令修改文件,將連接zk的ip改為link參數(shù)對應(yīng)的zookeeper容器的別名 RUN sed -i 's/zookeeper.connect=localhost:2181/zookeeper.connect=zkhost:2181/g' $WORK_PATH/$KAFKA_PACKAGE_NAME/config/server.properties #給shell賦予執(zhí)行權(quán)限 RUN chmod a+x $WORK_PATH/start_server.sh
如腳本所示,操作并不復(fù)雜,復(fù)制解壓kafka安裝包,啟動shell腳本,再把配置文件中zookeeper的ip改成link時zookeeper的別名;
Dockerfile編寫完成后,和kafka_2.9.2-0.8.1.tgz以及start_server.sh放在同一個目錄下,用控制臺在此目錄下執(zhí)行:
docker build -t bolingcavalry/kafka:0.0.1 .
鏡像構(gòu)建成功后,新建一個目錄編寫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在啟動時執(zhí)行了start_server.sh腳本把服務(wù)啟動起來了;
message_producer和message_consumer都僅僅是將kafka環(huán)境安裝好了,以便于通過命令行發(fā)送或者訂閱消息,但是這兩個容器本身并未啟動server;
kafka_server,message_producer,message_consumer都通過link參數(shù)連接到了zookeeper容器,并且message_producer還連接到了kafka server,因為發(fā)送消息的時候會用到kafka server的ip地址;
現(xiàn)在打開終端,在docker-compose.yml所在目錄下執(zhí)行docker-compose up -d,即可啟動所有容器。
看完上述內(nèi)容,你們對如何進行Docker下kafka的本地環(huán)境搭建有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。