亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Docker搭建Zookeeper和Kafka集群實例分析

發布時間:2022-05-31 11:42:43 來源:億速云 閱讀:110 作者:iii 欄目:大數據

這篇文章主要介紹“Docker搭建Zookeeper和Kafka集群實例分析”,在日常操作中,相信很多人在Docker搭建Zookeeper和Kafka集群實例分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Docker搭建Zookeeper和Kafka集群實例分析”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

環境準備

一臺可以上網且有centos7虛擬機的電腦

為什么使用虛擬機?因為使用的筆記本,所以每次連接網絡ip都會改變,還要總是修改配置文件的,過于繁瑣,不方便測試。(通過docker虛擬網絡的方式可以避免此問題,當時實驗的時候沒有了解到)

docker 安裝

如果已經安裝docker請忽略此步驟

  • docker支持以下的centos版本:

  • centos 7 (64-bit):要求系統為64位、系統內核版本為 3.10 以上。

  • centos 6.5(64-bit)或更高的版本:要求系統為64位、系統內核版本為 2.6.32-431 或者更高版本。

  • centos 僅發行版本中的內核支持 docker。

yum安裝

docker 要求 centos 系統的內核版本高于 3.10 ,查看上文的前提條件來驗證你的centos 版本是否支持 docker 。

# 查看內核版本
$ uname -a
#安裝 docker
$ yum -y install docker
#啟動 docker 后臺服務
$ service docker start
# 由于本地沒有hello-world這個鏡像,所以會下載一個hello-world的鏡像,并在容器內運行。
$ docker run hello-world

腳本安裝

使用 sudo 或 root 權限登錄 centos。

確保 yum 包更新到最新。

$ sudo yum update

獲取并執行 docker 安裝腳本。

$ curl -fssl https://get.docker.com -o get-docker.sh
# 執行這個腳本會添加 docker.repo 源并安裝 docker。
$ sudo sh get-docker.sh

啟動docker

$ sudo systemctl start docker
# 驗證 docker 是否安裝成功并在容器中執行一個測試的鏡像。
$ sudo docker run hello-world
$ docker ps

鏡像加速

開始讓我配置國內鏡像源的時候我是拒絕的,但是使用之后發現那下載速度 duang~ 的一下就上去了。所以強烈建議大家配置國內鏡像源。

打開/創建 /etc/docker/daemon.json 文件,添加以下內容:

{
 "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

zookeeper集群搭建

zookeeper鏡像:zookeeper:3.4

鏡像準備

$ docker pull zookeeper:3.4

查找鏡像可以去

docker pull images:tag // 代表拉取 tag 版本的 image 鏡像

建立獨立zookeeper容器

我們首先用最簡單的方式創建一個獨立的zookeeper節點,然后我們根據這個例子創建出其他的節點。

$ docker run --name zookeeper -p 2181:2181 -d zookeeper:3.4

默認的,容器內配置文件在, /conf/zoo.cfg,數據和日志目錄默認在 /data 和 /datalog,需要的話可以將上述目錄映射到宿主機。

參數解釋

--name:指定容器名字
-p:為容器暴露出來的端口分配端口號
-d:在后臺運行容器并打印容器id

集群搭建

其它節點的zookeeper容器創建方式與創建獨立容器類似,需要注意的是,要分別指定節點的id和修改文件中多節點的配置,相應的創建命令如下:

新建docker網絡

$ docker network create zoo_kafka
$ docker network ls

zookeeper容器1

$ docker run -d \
   --restart=always \
   -v /opt/docker/zookeeper/zoo1/data:/data \
   -v /opt/docker/zookeeper/zoo1/datalog:/datalog \
   -e zoo_my_id=1 \
   -p 2181:2181 \
   -e zoo_servers="server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888" \
   --name=zoo1 \
   --net=viemall-zookeeper \
   --privileged \
   zookeeper:3.4

zookeeper容器2

$ docker run -d \
   --restart=always \
   -v /opt/docker/zookeeper/zoo2/data:/data \
   -v /opt/docker/zookeeper/zoo2/datalog:/datalog \
   -e zoo_my_id=2 \
   -p 2182:2181 \
   -e zoo_servers="server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888" \
   --name=zoo2 \
   --net=viemall-zookeeper \
   --privileged \
   zookeeper:3.4

zookeeper容器3

$ docker run -d \
   --restart=always \
   -v /opt/docker/zookeeper/zoo3/data:/data \
   -v /opt/docker/zookeeper/zoo3/datalog:/datalog \
   -e zoo_my_id=3 \
   -p 2183:2181 \
   -e zoo_servers="server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888" \
   --name=zoo3 \
   --net=viemall-zookeeper \
   --privileged \
   zookeeper:3.4

這種方式雖然也實現了我們想要的,但是步驟過于繁瑣,而且維護起來麻煩(懶癌晚期),所以我們使用 docker-compose 的方式來實現。

docker-compose 搭建zookeeper集群

新建docker網絡

$ docker network create viemall-zookeeper
$ docker network ls

編寫 docker-compose.yml 腳本

使用方式:

安裝 docker-compose

# 獲取腳本
$ curl -l https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 賦予執行權限
$chmod +x /usr/local/bin/docker-compose

任意目錄下新建 docker-compose.yml 文件,復制以下內容

執行命令 docker-compose up -d

命令對照
|命令|解釋|
|-|-|
|docker-compose up|啟動所有容器|
|docker-compose up -d|后臺啟動并運行所有容器|
|docker-compose up --no-recreate -d|不重新創建已經停止的容器|
|docker-compose up -d test2|只啟動test2這個容器|
|docker-compose stop|停止容器|
|docker-compose start|啟動容器|
|docker-compose down|停止并銷毀容器|

docker-compose.yml詳情

version: '2'
services:
 zoo1:
  image: zookeeper:3.4 # 鏡像名稱
  restart: always # 當發生錯誤時自動重啟
  hostname: zoo1
  container_name: zoo1
  privileged: true
  ports: # 端口
   - 2181:2181
  volumes: # 掛載數據卷
   - ./zoo1/data:/data
   - ./zoo1/datalog:/datalog 
  environment:
   tz: asia/shanghai
   zoo_my_id: 1 # 節點id
   zoo_port: 2181 # zookeeper端口號
   zoo_servers: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 # zookeeper節點列表
  networks:
   default:
    ipv4_address: 172.23.0.11

 zoo2:
  image: zookeeper:3.4
  restart: always
  hostname: zoo2
  container_name: zoo2
  privileged: true
  ports:
   - 2182:2181
  volumes:
   - ./zoo2/data:/data
   - ./zoo2/datalog:/datalog
  environment:
   tz: asia/shanghai
   zoo_my_id: 2
   zoo_port: 2181
   zoo_servers: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
  networks:
   default:
    ipv4_address: 172.23.0.12

 zoo3:
  image: zookeeper:3.4
  restart: always
  hostname: zoo3
  container_name: zoo3
  privileged: true
  ports:
   - 2183:2181
  volumes:
   - ./zoo3/data:/data
   - ./zoo3/datalog:/datalog
  environment:
   tz: asia/shanghai
   zoo_my_id: 3
   zoo_port: 2181
   zoo_servers: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
  networks:
   default:
    ipv4_address: 172.23.0.13

networks:
 default:
  external:
   name: zoo_kafka

驗證

從圖中我們可以看出,有一個leader,兩個flower,至此我們的zookeeper集群就已經搭建好了

Docker搭建Zookeeper和Kafka集群實例分析

kafka集群搭建

有了上面的基礎,再去搞kafka集群還是問題嗎?其實就是幾個變量值不同而已。

有了上邊的例子,就不費勁去搞單節點的kafka了,直接使用docker-compose的方式,部署三個節點,其實方式大同小異,上邊也說到,其實就是一些屬性不同而已;這時候我們就不需要再去新建 docker 網絡了,直接使用前邊搭建 zookeeper 集群時創建的網絡即可!

環境準備

kafka鏡像:wurstmeister/kafka
kafka-manager鏡像:sheepkiller/kafka-manager

# 不指定版本默認拉取最新版本的鏡像
docker pull wurstmeister/kafka
docker pull sheepkiller/kafka-manager

編寫 docker-compose.yml 腳本

使用方式:

安裝 docker-compose

# 獲取腳本
$ curl -l https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 賦予執行權限
$chmod +x /usr/local/bin/docker-compose

任意目錄下新建 docker-compose.yml 文件,復制以下內容

執行命令 docker-compose up -d

命令對照
|命令|解釋|
|-|-|-|
|docker-compose up|啟動所有容器|
|docker-compose up -d|后臺啟動并運行所有容器|
|docker-compose up --no-recreate -d|不重新創建已經停止的容器|
|docker-compose up -d test2|只啟動test2這個容器|
|docker-compose stop|停止容器|
|docker-compose start|啟動容器|
|docker-compose down|停止并銷毀容器|

docker-compose.yml詳細內容

version: '2'

services:
 broker1:
  image: wurstmeister/kafka
  restart: always
  hostname: broker1
  container_name: broker1
  privileged: true
  ports:
   - "9091:9092"
  environment:
   kafka_broker_id: 1
   kafka_listeners: plaintext://broker1:9092
   kafka_advertised_listeners: plaintext://broker1:9092
   kafka_advertised_host_name: broker1
   kafka_advertised_port: 9092
   kafka_zookeeper_connect: zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1
   jmx_port: 9988
  volumes:
   - /var/run/docker.sock:/var/run/docker.sock
   - ./broker1:/kafka/kafka\-logs\-broker1
  external_links:
  - zoo1
  - zoo2
  - zoo3
  networks:
   default:
    ipv4_address: 172.23.0.14

 broker2:
  image: wurstmeister/kafka
  restart: always
  hostname: broker2
  container_name: broker2
  privileged: true
  ports:
   - "9092:9092"
  environment:
   kafka_broker_id: 2
   kafka_listeners: plaintext://broker2:9092
   kafka_advertised_listeners: plaintext://broker2:9092
   kafka_advertised_host_name: broker2
   kafka_advertised_port: 9092
   kafka_zookeeper_connect: zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1
   jmx_port: 9988
  volumes:
   - /var/run/docker.sock:/var/run/docker.sock
   - ./broker2:/kafka/kafka\-logs\-broker2
  external_links: # 連接本compose文件以外的container
  - zoo1
  - zoo2
  - zoo3
  networks:
   default:
    ipv4_address: 172.23.0.15

 broker3:
  image: wurstmeister/kafka
  restart: always
  hostname: broker3
  container_name: broker3
  privileged: true
  ports:
   - "9093:9092"
  environment:
   kafka_broker_id: 3
   kafka_listeners: plaintext://broker3:9092
   kafka_advertised_listeners: plaintext://broker3:9092
   kafka_advertised_host_name: broker3
   kafka_advertised_port: 9092
   kafka_zookeeper_connect: zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1
   jmx_port: 9988
  volumes:
   - /var/run/docker.sock:/var/run/docker.sock
   - ./broker3:/kafka/kafka\-logs\-broker3
  external_links: # 連接本compose文件以外的container
  - zoo1
  - zoo2
  - zoo3
  networks:
   default:
    ipv4_address: 172.23.0.16

 kafka-manager:
  image: sheepkiller/kafka-manager:latest
  restart: always
  container_name: kafka-manager
  hostname: kafka-manager
  ports:
   - "9000:9000"
  links:      # 連接本compose文件創建的container
   - broker1
   - broker2
   - broker3
  external_links:  # 連接本compose文件以外的container
   - zoo1
   - zoo2
   - zoo3
  environment:
   zk_hosts: zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1
   kafka_brokers: broker1:9092,broker2:9092,broker3:9092
   application_secret: letmein
   km_args: -djava.net.preferipv4stack=true
  networks:
   default:
    ipv4_address: 172.23.0.10

networks:
 default:
  external:  # 使用已創建的網絡
   name: zoo_kafka

驗證

我們打開kafka-manager的管理頁面,訪問路徑是,宿主機ip:9000;

Docker搭建Zookeeper和Kafka集群實例分析

如果所示,填寫上zookeeper集群的地址,劃到最下邊點擊save

點擊剛剛添加的集群,可以看到,集群中有三個節點

Docker搭建Zookeeper和Kafka集群實例分析

搭建過程中遇到的問題

掛載數據卷無限重啟,查看log提示:chown: changing ownership of ‘/var/lib/mysql/....‘: permission denied

解決方式:

  • 在docker run中加入 --privileged=true 給容器加上特定權限

  • 臨時關閉selinux: setenforce 0

  • 添加selinux規則,改變要掛載的目錄的安全性文本

kafka-manager報jmx相關錯誤,

解決方法:

  • 在每一個kafka節點加上環境變量 jmx_port=端口

  • 加上之后發現連不上,又是網絡連接的問題,于是又把每個jmx端口暴露出來,然后fire-wall放行, 解決問題。

  • kafka_advertised_host_name這個最好設置宿主機的ip,宿主機以外的代碼或者工具來連接,后面的端口也需要設置暴露的端口。

[error] k.m.j.kafkajmx$ - failed to connect to service:jmx:rmi:///jndi/rmi://9.11.8.48:-1/jmxrmi java.lang.illegalargumentexception: requirement failed: no jmx port but jmx polling enabled!

在容器中查看topic時報以下錯誤(不僅僅是topic的命令,好像所有的都會出錯)

$ bin/kafka-topics.sh --list --zookeeper zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1
# 以下是錯誤
error: exception thrown by the agent : java.rmi.server.exportexception: port already in use: 7203; nested exception is:
    java.net.bindexception: address already in use

解決方法:

在命令前加上unset jmx_port;指令,上邊的命令改造為:

$ unset jmx_port;bin/kafka-topics.sh --list --zookeeper zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1

附:docker常用指令

# 查看所有鏡像
docker images
# 查看所有運行中的容器
docker ps
# 查看所有容器
docker ps -a
# 獲取所有容器ip
$ docker inspect --format='{{.name}} - {{range .networksettings.networks}}{{.ipaddress}}{{end}}' $(docker ps -aq)
# 查看容器內部日志
$ docker logs -f <容器id>
# 進入容器內部
$ docker exec -it <容器id> /bin/basj
# 創建容器 -d代表后臺啟動
docker run --name <容器名稱> -e <參數> -v <掛載數據卷> <容器id>
# 重啟容器
docker restart <容器id>
# 關閉容器
docker stop <容器id>
# 運行容器
docker start <容器id>

到此,關于“Docker搭建Zookeeper和Kafka集群實例分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

稻城县| 山丹县| 长子县| 滨海县| 苍溪县| 武定县| 大新县| 阳东县| 方城县| 肇东市| 前郭尔| 宁陵县| 沧州市| 和硕县| 加查县| 高唐县| 南丹县| 浮山县| 大姚县| 西安市| 鄂伦春自治旗| 迁西县| 揭西县| 宜州市| 博野县| 洮南市| 建始县| 彭水| 手游| 新余市| 惠水县| 金秀| 永德县| 东港市| 商南县| 百色市| 栾川县| 大庆市| 武定县| 建平县| 雅江县|