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

相关推荐
行者Sun19891 小时前
【K8s】专题十六(3):Kubernetes 包管理工具之 Helm 语法
云原生·容器·kubernetes·helm
种豆走天下11 小时前
Zookeeper学习
分布式·学习·zookeeper
全是操作12 小时前
k8s scheduler源码阅读
云原生·容器·kubernetes
obboda13 小时前
Docker基础入门
运维·docker·云原生·容器·eureka
me83213 小时前
【Linux docker】关于docker启动出错的解决方法。
java·linux·docker
cooldream200913 小时前
Docker Desktop 安装与使用详解
运维·docker·容器
biubiubiu070614 小时前
JDK ZOOKEEPER KAFKA安装
java·zookeeper·java-zookeeper
与光同尘 大道至简14 小时前
万字技术指南STM32F103C8T6 + ESP8266-01 连接 OneNet 平台 MQTT/HTTP
stm32·单片机·嵌入式硬件·物联网·http·docker·信息与通信
zhanglb1215 小时前
使用 Docker 安装 Jenkins 并实现项目自动化部署
docker·jenkins
川石课堂软件测试15 小时前
涨薪技术|Kubernetes(k8s)之Service服务
功能测试·adb·docker·云原生·容器·kubernetes·单元测试