docker-compose搭建kafka集群

环境准备

服务器提前安装docker以及docker-compose环境

编写docker-compose.yml

version: '3'
services:
  zoo1:
    image: zookeeper:3.4.14
    restart: unless-stopped
    hostname: zoo1
    ports:
      - "2181:2181"
    container_name: zookeeper
  kafka1:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 你的宿主机IP                     ## 修改:宿主机IP
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://宿主机IP:9092    ## 修改:宿主机IP
      KAFKA_ZOOKEEPER_CONNECT: "zoo1:2181"
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_BROKER_ID: 1
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    depends_on:
      - zoo1
    container_name: kafka1

  kafka2:
    image: wurstmeister/kafka
    ports:
      - "9093:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 宿主机IP                    ## 修改:宿主机IP
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://宿主机IP:9093   ## 修改:宿主机IP
      KAFKA_ZOOKEEPER_CONNECT: "zoo1:2181"
      KAFKA_ADVERTISED_PORT: 9093
      KAFKA_BROKER_ID: 2
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    depends_on:
      - zoo1
    container_name: kafka2
  kafka-manager:
    image: sheepkiller/kafka-manager              ## 镜像:开源的web管理kafka集群的界面
    environment:
        ZK_HOSTS: 宿主机IP                   ## 修改:宿主机IP
    ports:
      - "9000:9000"                               ## 暴露端口

关于上述的docker-compose.yml的配置文件的每一行解释,这里不再过多解释,可以参阅官方资料,需要补充两点说明:

  1. 网络环境,可以使用docker命令创建一个网络,然后再在yml文件中指定自己的网络
  2. kafka-manager,kafka客户端可视化控制台,可以根据需要选择性安装
  3. 如果需要继续增加kafka节点,参照kafka1和kafka2的配置继续追加接口
  4. 生产环境下,zookeeper是很重要的服务协调者,建议做成集群,即配置高可用
  5. 生产环境下,建议将zookeeper和kafka都配置上数据卷,方便运维和管理

启动集群

通过下面的命令启动集群,注意是在docker-compose.yml同级目录下

docker-compose up -d

或者

docker-compose -f  docker-compose.yml up -d

首次构建,会去中央仓库下载zookeeper和kafka
docker-compose搭建kafka集群_第1张图片
使用docker-compose的一个好处就是,通过docker-compose命令构建后会自己启动集群而无需像docker那样再执行一遍命令,可以看到kafka两个节点和zookeeper已经启动
docker-compose搭建kafka集群_第2张图片

kafka集群测试

下面简单测试一下kafka的命令

1、进入kafka其中一个容器,通过终端命令创建一个topic并发消息

docker exec -it kafka1 /bin/bash
kafka-console-producer.sh --broker-list kafka1:9092,kafka2:9093 --topic test001

在这里插入图片描述
2、进入kafka1的终端命令控制台并发几条消息

kafka-console-producer.sh --broker-list kafka1:9092,kafka2:9093 --topic test001

在这里插入图片描述

3、通过kafka2开启一个客户端作为consumer接收来自上述kafka1发送的消息

kafka-console-consumer.sh --bootstrap-server kafka1:9092,kafka2:9093 --topic test001 --from-beginning

在这里插入图片描述

可以看到消息已经可以正常接收了

本篇的讲解到此结束,可以参考上述补充的5条说明继续进行优化和完善yml的配置,最后感谢观看!

你可能感兴趣的:(docker)