docker-compose在虚拟机上搭建zookeeper+kafka3.0.0集群

1. 概述

以docker-compose的方式搭建zookeeper+kafka3的集群,比起用docker命令的方式更加简单,还能保留配置信息。不会docker-compose没关系,按照我下面的操作步骤即可。集群的结构是三个zookeeper节点加上三个kafka节点,zookeeper镜像的版本是3.8.0,kafka的版本为3.0.0。在安装前默认你已经安装好了docker和docker-compose。本文参考引用博客中的安装过程,原博主的docker-compose文件有一点小瑕疵,在重启虚拟机以后,kafka节点不会自动重启,需要我们自己手动启动容器。我在原博主的基础上补充上了这一点,现在你即使重启虚拟机,docker容器会自动启动。

2. 代码

powershell 复制代码
version: '3.1'
networks:
  zk-net:  # 网络名
    driver: bridge


services:
  # zookeeper集群
  zoo1:
    image: zookeeper:3.8.0
    container_name: zoo1   # 容器名称
    restart: always       # 开机自启
    hostname: zoo1        # 主机名
    ports:
      - 2181: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
    networks:
      - zk-net
  zoo2:
    image: zookeeper:3.8.0
    container_name: zoo2
    restart: always
    hostname: zoo2
    ports:
      - 2182: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
    networks:
      - zk-net
  zoo3:
    image: zookeeper:3.8.0
    container_name: zoo3
    restart: always
    hostname: zoo3
    ports:
      - 2183: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:
      - zk-net
  # kafka集群
  kafka1:
    image: 'bitnami/kafka:3.0.0'
    container_name: kafka1
    restart: always
    hostname: kafka1
    networks:
      - zk-net
    ports:
      - '9092:9092'
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zoo1:2181,zoo2:2182,zoo3:2183/kafka  # 连接zookeeper集群
      - KAFKA_BROKER_ID=1 # 设置kafka的brokerid
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092  # 当前kafka节点暴露出的端口号
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.11.111:9092  # 外部访问的路径
      - ALLOW_PLAINTEXT_LISTENER=yes
    depends_on:
      - zoo1
      - zoo2
      - zoo3
  kafka2:
    image: 'bitnami/kafka:3.0.0'
    container_name: kafka2
    restart: always
    hostname: kafka2
    networks:
      - zk-net
    ports:
      - '9093:9093'
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zoo1:2181,zoo2:2182,zoo3:2183/kafka
      - KAFKA_BROKER_ID=2
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9093
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.11.111:9093
      - ALLOW_PLAINTEXT_LISTENER=yes
    depends_on:
      - zoo1
      - zoo2
      - zoo3
  kafka3:
    image: 'bitnami/kafka:3.0.0'
    container_name: kafka3
    restart: always
    hostname: kafka3
    networks:
      - zk-net
    ports:
      - '9094:9094'
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zoo1:2181,zoo2:2182,zoo3:2183/kafka
      - KAFKA_BROKER_ID=3
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9094
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.11.111:9094
      - ALLOW_PLAINTEXT_LISTENER=yes
    depends_on:
      - zoo1
      - zoo2
      - zoo3

注意事项

  1. 文件中KAFKA_CFG_ADVERTISED_LISTENERS属性的IP替换为你自己虚拟机的IP。
  2. 建立docker-compose-zookeepers-kafkas.yml文件,将代码复制进去
  3. 将文件放入虚拟机中,命令行切换到yml文件所在目录
  4. 运行指令:docker-compose -f docker-compose-zookeepers-kafkas.yml up -d
  5. 使用docker ps查看总共六个容器是否启动成功
  6. 验证zookeeper安装成功
powershell 复制代码
# 随便进入一个zk容器
docker exec -it zoo1 /bin/bash
# 进入到zk的bin目录
cd /apache-zookeeper-3.8.0-bin/
cd bin
# 连接到 ZooKeeper 服务器并执行各种操作。
./zkCli.sh -server 127.0.0.1:2181
# 输入
ls /kafka/brokers/ids
# 结果输出[1, 2, 3]说明kafka与zk之间的连接没有问题
  1. 验证kafka安装成功
shell 复制代码
# 1. 建立两个客户端
# 2. 客户端1进入kafka1服务(生产者)
docker exec -it kafka1 /bin/bash
# 创建一个主题Topic,起名为first,指明3个分区和3个副本
# 分区可以超过3,副本不能超过3
kafka-topics.sh --bootstrap-server localhost:9092 --create --partitions 3 --replication-factor 3 --topic first
# 生产者发送消息到主题
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic first
# 3. 客户端2进入kafka2服务(消费者)
docker exec -it kafka2 /bin/bash
# 消费者先查看主题列表
kafka-topics.sh --bootstrap-server localhost:9093 --list
# 使用消费者脚本,开始监听消息,相当于进入消费者模式
kafka-console-consumer.sh --bootstrap-server localhost:9093 --topic first
# 4. 客户端1生产者发消息,客户端2消费者消费消息

参考博客:

https://blog.csdn.net/cl939974883/article/details/126511784

相关推荐
wuxingge8 小时前
k8s1.30.0高可用集群部署
云原生·容器·kubernetes
谭震鸿9 小时前
Zookeeper集群搭建Centos环境下
分布式·zookeeper·centos
志凌海纳SmartX9 小时前
趋势洞察|AI 能否带动裸金属 K8s 强势崛起?
云原生·容器·kubernetes
锅总9 小时前
nacos与k8s service健康检查详解
云原生·容器·kubernetes
BUG弄潮儿10 小时前
k8s 集群安装
云原生·容器·kubernetes
意疏10 小时前
【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行
linux·docker
墨鸦_Cormorant10 小时前
使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
redis·nginx·docker
Code_Artist10 小时前
Docker镜像加速解决方案:配置HTTP代理,让Docker学会科学上网!
docker·云原生·容器
颜淡慕潇11 小时前
【K8S系列】kubectl describe pod显示ImagePullBackOff,如何进一步排查?
后端·云原生·容器·kubernetes
wanmei00211 小时前
Dockerfile复制目录进入镜像里
docker