Docker 搭建 zookeeper、kafka 集群

这篇具有很好参考价值的文章主要介绍了Docker 搭建 zookeeper、kafka 集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、zookeeper 搭建

首先创建一个自定义网络,后续的所有容器都放入同一个内网中,容器之间还可以通过容器名称进行直接访问,在后续的配置中只需要写明容器名称即可,会自动找到对应的IP地址,防止重启容器后IP地址发生变化时,还要去修改配置文件的操作

docker network create kafka-net

1、zookeeper 单机搭建

创建目录

mkdir -p /mnt/data/zookeeper/data # 数据挂载目录
mkdir -p /mnt/data/zookeeper/conf # 配置挂载目录
mkdir -p /mnt/data/zookeeper/logs # 日志挂载目录

启动zookeeper

docker pull zookeeper:3.5.9

docker run -d --privileged=true --name zookeeper -p 2181:2181 --network kafka-net --network-alias zookeeper -v /mnt/data/zookeeper/data:/data -v /mnt/data/zookeeper/conf:/conf -v /mnt/data/zookeeper/logs:/datalog zookeeper:3.5.9

2888为组成zookeeper服务器之间的通信端口,3888为用来选举leader的端口

进入zookeeper容器

docker exec -it 容器id /bin/bash

找到配置文件位置

cat /conf/zoo.cfg

查看zookeeper状态

zkServer.sh status

2、zookeeper 集群搭建

  • 注意,此处是在一台服务器上搭建的伪集群,以下是docker compose的部署方案
  • 注意:安装时遇到的问题,zookeeper 的版本必须是 3.5.0 以后,3.5.0 版本之前的配置与 3.5.0 版本之后是不同的,选错版本会导致 zookeeper 无法形成集群,最终导致使用 kafka 时报错!!!!!!
mkdir -p /mnt/data/zookeeper
cd /mnt/data/zookeeper
vim zookeeper-compose.yml

zookeeper-compose.yml 内容如下

version: '3'

services:
  zoo1:
    image: zookeeper:3.5.9
    container_name: zoo1
    restart: always
    privileged: true
    ports:
      - 2182:2181
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

  zoo2:
    image: zookeeper:3.5.9
    container_name: zoo2
    restart: always
    privileged: true
    ports:
      - 2183:2181
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

  zoo3:
    image: zookeeper:3.5.9
    container_name: zoo3
    restart: always
    privileged: true
    ports:
      - 2184:2181
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

networks:
  default:
    external: true
    name: kafka-net
  • 注意:docker-compose会默认将当前的容器名称作为network的alias
  • 执行 docker-compose up,表示执行当前路径下的yml文件。也可以指定执行某一个yml文件
    • docker-compose -f zookeeper-compose.yml up -d
  • 通过 docker inspect 容器ID 查看容器的网络配置

2、kafka 搭建

1、docer搭建kafka集群

docker pull wurstmeister/kafka
docker run -d  --privileged=true \
--name kafka0 -p 9092:9092 \
--network kafka-net \
--network-alias kafka0 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.231.10:9092 \
-e ALLOW_PLAINTEXT_LISTENER=yes \
wurstmeister/kafka:latest

docker run -d  --privileged=true \
--name kafka1 -p 9093:9092 \
--network kafka-net \
--network-alias kafka1 \
-e KAFKA_BROKER_ID=1 \
-e KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.231.10:9093 \
-e ALLOW_PLAINTEXT_LISTENER=yes \
wurstmeister/kafka:latest

docker run -d  --privileged=true \
--name kafka2 -p 9094:9092 \
--network kafka-net \
--network-alias kafka2 \
-e KAFKA_BROKER_ID=2 \
-e KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.231.10:9094 \
-e ALLOW_PLAINTEXT_LISTENER=yes \
wurstmeister/kafka:latest
  • KAFKA_LISTENERS 与 KAFKA_ADVERTISED_LISTENERS 是为了区分内网和外网的
  • 如果只有内网访问,就可以只配置 KAFKA_LISTENERS
  • 如果涉及了外网访问,比如要在云服务器上部署使用,就需要配置 KAFKA_ADVERTISED_LISTENERS 参数了,在本文开始时配置了一个 kafka-net 的网络,也就是处于这个网络下的访问才属于内网访问,而 kafka 部署完毕后,需要在其他服务器上访问 kafka,这就需要通过外网访问 kafka,所以必须配置 KAFKA_ADVERTISED_LISTENERS ,且值为 PLAINTEXT://<服务器ip>:<暴露端口> ,例如我的服务器外网地址为 192.168.231.10,端口为容器暴露的端口
  • KAFKA_BROKER_ID : broker的ID,这个ID是集群的标识,不能重复
  • KAFKA_ZOOKEEPER_CONNECT:zookeeper的连接地址
  • KAFKA_LISTENERS:标识kafka服务运行在容器内的9092端口,因为没有指定host,所以是0.0.0.0标识所有的网络接口
  • KAFKA_ADVERTISED_LISTENERS:kafka发布到zookeeper供客户端使用的服务地址

2、docker compose 搭建kafka集群

  • 注意,此处是在一台服务器上搭建的伪集群,以下是docker compose的部署方案
  • 注意,需要等待 zookeeper 完全启动好后再启动 kafka 集群
mkdir -p /mnt/data/kafka/node1/data # 数据挂载目录
mkdir -p /mnt/data/kafka/node2/data # 数据挂载目录
mkdir -p /mnt/data/kafka/node3/data # 数据挂载目录

cd /mnt/data/kafka
vim kafka-compose.yml
version: '3'

services:
  broker1:
    image: wurstmeister/kafka:latest
    restart: always
    container_name: broker1
    privileged: true
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.231.10:9092    ## 宿主机IP
      KAFKA_ADVERTISED_PORT: 9092
      ## zookeeper 集群,因为都在同一个内网,所以可以通过容器名称获取到容器的ip
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181		
    volumes:
      - "/mnt/data/kafka/node1/data/:/kafka"

  broker2:
    image: wurstmeister/kafka:latest
    restart: always
    container_name: broker2
    privileged: true
    ports:
      - "9093:9092"
    environment:
      KAFKA_BROKER_ID: 2
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.231.10:9093    ## 宿主机IP
      KAFKA_ADVERTISED_PORT: 9093
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
    volumes:
      - "/mnt/data/kafka/node2/data/:/kafka"

  broker3:
    image: wurstmeister/kafka:latest
    restart: always
    container_name: broker3
    privileged: true
    ports:
      - "9094:9092"
    environment:
      KAFKA_BROKER_ID: 3
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.231.10:9094   ## 宿主机IP
      KAFKA_ADVERTISED_PORT: 9094
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
    volumes:
      - "/mnt/data/kafka/node3/data/:/kafka"

networks:
  default:
    external: true
    name: kafka-net
  • 执行 docker-compose up,表示执行当前路径下的yml文件。也可以指定执行某一个yml文件
    • docker-compose -f kafka-compose.yml up -d
  • 通过 docker inspect 容器ID 查看容器的网络配置

3、docker compose 整体启动

前面可以省略,直接创建一个docker-compose.yml 文件即可启动 3台 zookeeper 与 3台 kafka

version: '3'

services:
  zoo1:
    image: zookeeper:3.5.9
    container_name: zoo1
    restart: always
    ports:
      - 2182:2181
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

  zoo2:
    image: zookeeper:3.5.9
    container_name: zoo2
    restart: always
    ports:
      - 2183:2181
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

  zoo3:
    image: zookeeper:3.5.9
    container_name: zoo3
    restart: always
    ports:
      - 2184:2181
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

  broker1:
    image: wurstmeister/kafka:latest
    restart: always
    container_name: broker1
    ports:
      - "9092:9092"
    # depends_on:通过 depends_on 告诉 docker-compose 当前服务启动之前先要把 depends_on 指定的服务启动起来才行
    # 例如:kafka 依赖 zookeeper
    depends_on:
      - zoo1
      - zoo2
      - zoo3
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.231.10:9092    ## 宿主机IP
      KAFKA_ADVERTISED_HOST_NAME: broker1
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
    volumes:
      - "/mnt/data/kafka/node1/data/:/kafka"

  broker2:
    image: wurstmeister/kafka:latest
    restart: always
    container_name: broker2
    ports:
      - "9093:9092"
    depends_on:
      - zoo1
      - zoo2
      - zoo3
    environment:
      KAFKA_BROKER_ID: 2
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.231.10:9093    ## 宿主机IP
      KAFKA_ADVERTISED_HOST_NAME: broker2
      KAFKA_ADVERTISED_PORT: 9093
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
    volumes:
      - "/mnt/data/kafka/node2/data/:/kafka"

  broker3:
    image: wurstmeister/kafka:latest
    restart: always
    container_name: broker3
    ports:
      - "9094:9092"
    depends_on:
      - zoo1
      - zoo2
      - zoo3
    environment:
      KAFKA_BROKER_ID: 3
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.231.10:9094   ## 宿主机IP
      KAFKA_ADVERTISED_HOST_NAME: broker3
      KAFKA_ADVERTISED_PORT: 9094
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
    volumes:
      - "/mnt/data/kafka/node3/data/:/kafka"

networks:
  default:
    external: true
    name: kafka-net

4、可视化工具 offsetexplorer

docker 部署zookeeper,运维,docker,kafka,zookeeper,java
docker 部署zookeeper,运维,docker,kafka,zookeeper,java文章来源地址https://www.toymoban.com/news/detail-695145.html

5、可视化工具 kafka-map

docker run -d \
-p 8080:8080 \
-v /opt/kafka-map/data:/usr/local/kafka-map/data \
-e DEFAULT_USERNAME=admin \
-e DEFAULT_PASSWORD=admin \
--name kafka-map \
--restart always dushixiang/kafka-map:latest
容器启动后,访问:ip:8080 访问

kafka-map官网:https://gitee.com/dushixiang/kafka-map

到了这里,关于Docker 搭建 zookeeper、kafka 集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Zookeeper之基于Docker搭建集群

    搭建ZK分布式模式,由2n+1台服务器组成。 搭建集群有两种方式: 单机多服务: 不同服务使用不同的配置文件,配置不同的端口号等。 使用同一个配置不同的server.id,即IP相同,但是端口不同。 多机多服务:各自配置zoo.cfg文件,互相加入各自的服务器列表。 Loader 主节点 :

    2024年02月04日
    浏览(46)
  • 如何使用Docker搭建ZooKeepe集群

    1、拉取镜像 2、创建网络 Docker创建容器时默认采用bridge网络,自行分配ip,不允许自己指定。在实际部署中,需要指定容器ip,不允许其自行分配ip,尤其在搭建集群时。可以通过docker network create指令创建自己的bridge网络 ,在创建容器时指定网络和ip即可。 3、配置文件 a、创

    2024年02月11日
    浏览(42)
  • 【Docker安装部署Kafka+Zookeeper详细教程】

    Docker拉取zookeeper的镜像 Docker拉取kafka的镜像 这个地方没有使用挂载目录的方式,想要使用挂载目录的方式可以看我前面的文章呦!!! 【Linux操作系统使用Docker部署Zookeeper】 【Docker安装部署Zookeeper集群】 参数说明 查看zookeeper的ip地址 后面部署kafka会使用到zookeeper的ip地址 进

    2023年04月19日
    浏览(50)
  • 【Kafka】docker部署Kafka集群

    目录 Kafka概述 Kafka集群docker部署流程 简述 环境准备 部署流程  参考文献           以下概述Kafka内的几个核心概念,可参考官方文档,有兴趣可读:kafka.apache.org Topic与日志         Topic 就是数据主题,是数据记录发布的地方,可以用来区分业务系统。Kafka 中的 Topics 总是

    2024年02月12日
    浏览(79)
  • zookeeper的介绍和用docker搭建zookeeper集群,以及Go语言使用zookeeper

    typora-copy-images-to: imgs 2.1、Docker官方镜像 Docker Zookeeper 2.2、Docker安装zookeeper 下载zookeeper最新版的镜像 docker inspect zookeeper用来查看zookeeper的详细信息 在/root/docker/目录下新建一个zookeeper挂载点文件夹 挂载本地文件夹并启动服务 参数解释 2.3、进入zookeeper容器客户端 方式一 运行上

    2024年02月10日
    浏览(39)
  • docker快速搭建kafka集群

    一、准备工作 1、拉取kafka镜像 2、拉取kafka可视化管理工具镜像 3、安装docker-compose工具 4、创建相关文件夹 5、创建网络,用于kafka和zookeeper共享一个网络段 6、构建zookeeper集群 kafka集群需要用到zookeeper集群,因此需要先构建zookeeper集群,请查看文章 docker快速搭建zookeeper集群

    2024年02月13日
    浏览(38)
  • docker搭建kafka集群并测试完整版

    1.安装docker desktop. 打开docker官网,下载docker desktop,这里直接给出网址:Install Docker Desktop on Windows | Docker Docs 如下图,点击下载即可。 下载好后 点击运行exe文件,我们采用交互式安装程序。 安装完成后直接重启即可,默认安装在c盘,如果不想安装在c盘就采用命令行的方式安装

    2024年02月02日
    浏览(48)
  • docker-compose部署kafka单机和集群

    使用 docker-compose 部署 Kafka:3.5。 从 3.3 版本后,Kafka 引入了 KRaft 来替代 ZooKeeper,所以我们不必再部署 zk 了。 记得修改 KAFKA_CFG_ADVERTISED_LISTENERS 的 ip 为自己的 记得修改 KAFKA_CFG_ADVERTISED_LISTENERS 的 ip 地址为自己的 我们之后测试肯定用集群部署,就算是测试,也不用单机模式,

    2024年02月01日
    浏览(56)
  • 云计算集群搭建记录[Hadoop|Zookeeper|Hbase|Spark | Docker |OpenStack]更新索引 |动态更新

    为了能够更好的查看所更新的文章,讲该博文设为索引 为了解决在编辑文件等操作的过程中的权限问题,博主一律 默认采用 root 账户登录 对于初次安装的用户可以采用如下命令行: 另外推荐一款终端工具:Tabby,既能够连接自己的服务器,也能够连接自己本地的虚拟机,还

    2023年04月13日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包