溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行Docker下kafka的本地環(huán)境搭建

發(fā)布時(shí)間:2021-12-10 17:08:59 來(lái)源:億速云 閱讀:350 作者:柒染 欄目:云計(jì)算

今天就跟大家聊聊有關(guān)如何進(jìn)行Docker下kafka的本地環(huán)境搭建,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

我們通過(guò)實(shí)戰(zhàn)來(lái)學(xué)習(xí)如何編寫(xiě)這些腳本,搭建本地kafka環(huán)境;

本次實(shí)踐會(huì)制作docker鏡像,整個(gè)環(huán)境涉及到多個(gè)容器,我們先把它們?nèi)苛谐鰜?lái),再梳理一下之間的關(guān)系,如下圖:

如何進(jìn)行Docker下kafka的本地環(huán)境搭建

kafka sever提供消息服務(wù); message producer的作用是產(chǎn)生執(zhí)行主題的消息; message consumer的作用是訂閱指定主題的消息并消費(fèi)掉。

###zookeeper### zookeeper使用單機(jī)版,沒(méi)什么需要定制的,因此直接使用官方鏡像即可,daocloud.io/library/zookeeper:3.3.6

###kafka sever### 去hub.docker.com上搜索kafka,沒(méi)看到官方標(biāo)志的鏡像,還是自己做一個(gè)吧,寫(xiě)Dockerfile之前先準(zhǔn)備兩個(gè)材料:kafka安裝包和啟動(dòng)kafka的shell腳本;

kafka安裝包用的是2.9.2-0.8.1版本,在 git@github.com:zq2599/docker_kafka.git中,請(qǐng)clone獲??;

啟動(dòng)kafka server的shell腳本內(nèi)容如下,很簡(jiǎn)單,在kafka的bin目錄下執(zhí)行腳本啟動(dòng)server即可:

#!/bin/bash
$WORK_PATH/$KAFKA_PACKAGE_NAME/bin/kafka-server-start.sh $WORK_PATH/$KAFKA_PACKAGE_NAME/config/server.properties

接下來(lái)可以編寫(xiě)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 <zq2599@gmail.com>

#定義工作目錄
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

#把啟動(dòng)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ù)對(duì)應(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安裝包,啟動(dòng)shell腳本,再把配置文件中zookeeper的ip改成link時(shí)zookeeper的別名;

Dockerfile編寫(xiě)完成后,和kafka_2.9.2-0.8.1.tgz以及start_server.sh放在同一個(gè)目錄下,用控制臺(tái)在此目錄下執(zhí)行:

docker build -t bolingcavalry/kafka:0.0.1 .

鏡像構(gòu)建成功后,新建一個(gè)目錄編寫(xiě)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中配置了四個(gè)容器:

  1. zookeeper是官方的;

  2. 其他三個(gè)都是用剛剛制作的bolingcavalry/kafka做鏡像生成的;

  3. kafka_server在啟動(dòng)時(shí)執(zhí)行了start_server.sh腳本把服務(wù)啟動(dòng)起來(lái)了;

  4. message_producer和message_consumer都僅僅是將kafka環(huán)境安裝好了,以便于通過(guò)命令行發(fā)送或者訂閱消息,但是這兩個(gè)容器本身并未啟動(dòng)server;

  5. kafka_server,message_producer,message_consumer都通過(guò)link參數(shù)連接到了zookeeper容器,并且message_producer還連接到了kafka server,因?yàn)榘l(fā)送消息的時(shí)候會(huì)用到kafka server的ip地址;

現(xiàn)在打開(kāi)終端,在docker-compose.yml所在目錄下執(zhí)行<font color="blue">docker-compose up -d</font>,即可啟動(dòng)所有容器。

看完上述內(nèi)容,你們對(duì)如何進(jìn)行Docker下kafka的本地環(huán)境搭建有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI