美文网首页
记录贴-Docker搭建Kafka集群

记录贴-Docker搭建Kafka集群

作者: 欢喜的看着书 | 来源:发表于2023-07-26 11:30 被阅读0次

    记录下日常操作的经验贴,防止后面忘了

    对于个人开发者而言,一般手头上没有多台服务器,有人可能会有云服务器,不过一般也只会买一台来用用就好;有人可能更习惯将本机当作服务器来玩。都可以。那么如何通过一台服务器或本机来搭建Kafka集群呢?

    无外乎两种方式,一是通过docker来搭建,每台kafka broker用不同的端口来启动,即可组成集群;二是通过虚拟机来搭建,即用VMware在服务器或本机上启动多台虚拟机,每台虚拟机都安装一个kafka broker。笔者采用的是第一种方式。

    1、环境说明及架构说明

    Linux系统:centos 8

    Zookeeper:wurstmeister/zookeeper

    Kafka:wurstmeister/kafka
    如下图,笔者准备搭建一台Zookeeper以及三个Kafka broker组成的Kafka Cluster。


    2、准备docker-composer.yml文件, 其中todo部分填写你本机的ip地址,因为是容器内使用 填写的是你本机的网络ip 非127.0.0.1

    version: '3'
    services:
      zookepper:
        image: wurstmeister/zookeeper                    # 原镜像`wurstmeister/zookeeper`
        container_name: zookeeper                        # 容器名为'zookeeper'
        volumes:                                         # 数据卷挂载路径设置,将本机目录映射到容器目录
          - "/etc/localtime:/etc/localtime"
        ports:                                           # 映射端口
          - "2181:2181"
    
      kafka:
        image: wurstmeister/kafka                                # 原镜像`wurstmeister/kafka`
        container_name: kafka                                    # 容器名为'kafka'
        volumes:                                                 # 数据卷挂载路径设置,将本机目录映射到容器目录
          - "/etc/localtime:/etc/localtime"
        environment:                                                       # 设置环境变量,相当于docker run命令中的-e
          KAFKA_BROKER_ID: 1                                               # 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
          KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://你的ip:9092 # TODO 将kafka的地址端口注册给zookeeper
          KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092                        # 配置kafka的监听端口
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
          KAFKA_CREATE_TOPICS: "hello_world"
          KAFKA_HEAP_OPTS: -Xmx1G -Xms256M
        ports:                              # 映射端口
          - "9092:9092"
        depends_on:                         # 解决容器依赖启动先后问题
          - zookepper
      kafka2:
        image: wurstmeister/kafka                                # 原镜像`wurstmeister/kafka`
        container_name: kafka2                                    # 容器名为'kafka'
        volumes:                                                 # 数据卷挂载路径设置,将本机目录映射到容器目录
          - "/etc/localtime:/etc/localtime"
        environment:                                                       # 设置环境变量,相当于docker run命令中的-e
          KAFKA_BROKER_ID: 2                                               # 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
          KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://你的ip:9093 # TODO 将kafka的地址端口注册给zookeeper
          KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9093                        # 配置kafka的监听端口
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
          KAFKA_CREATE_TOPICS: "hello_world"
          KAFKA_HEAP_OPTS: -Xmx1G -Xms256M
        ports:                              # 映射端口
          - "9093:9092"
        depends_on:                         # 解决容器依赖启动先后问题
          - zookepper
      kafka3:
        image: wurstmeister/kafka                                # 原镜像`wurstmeister/kafka`
        container_name: kafka3                                    # 容器名为'kafka'
        volumes:                                                 # 数据卷挂载路径设置,将本机目录映射到容器目录
          - "/etc/localtime:/etc/localtime"
        environment:                                                       # 设置环境变量,相当于docker run命令中的-e
          KAFKA_BROKER_ID: 3                                               # 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
          KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://你的ip:9094 # TODO 将kafka的地址端口注册给zookeeper
          KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9094                        # 配置kafka的监听端口
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
          KAFKA_CREATE_TOPICS: "hello_world"
          KAFKA_HEAP_OPTS: -Xmx1G -Xms256M
        ports:                              # 映射端口
          - "9094:9092"
        depends_on:                         # 解决容器依赖启动先后问题
          - zookepper
      kafka-manager:
        image: sheepkiller/kafka-manager                         # 原镜像`sheepkiller/kafka-manager`
        container_name: kafka-manager                            # 容器名为'kafka-manager'
        environment:                        # 设置环境变量,相当于docker run命令中的-e
          ZK_HOSTS: zookeeper:2181
          APPLICATION_SECRET: xxxxx
          KAFKA_MANAGER_AUTH_ENABLED: "true"  # 开启kafka-manager权限校验
          KAFKA_MANAGER_USERNAME: admin       # 登陆账户
          KAFKA_MANAGER_PASSWORD: 123456      # 登陆密码
        ports:                              # 映射端口
          - "9000:9000"
        depends_on:                         # 解决容器依赖启动先后问题
          - kafka
    

    3、使用命令构建多个容器

    docker-composer up -d
    

    4、查看,我这边使用docker的管理界面进行查看


    5.1、因为docker-composer构建文件中也构建好了 kafka-manager,用于界面化管理kafka的软件,所以可以通过本机地址 http://localhost:9000/ 来访问

    5.2、新建集群,Cluster Zookeeper Hosts 输入Zookeeper的地址 zookeeper:2181,其他的参数自己看着定,自己体验的话,我看着没啥需要改的。最后点击保存。


    5.3 点击 Cluster->List 可以看到你新建的集群列表,这里的这个集群其实仅仅是方面我们管理的一个定义名称,把kafka集群的配置给拉过来。下图是我建立的一个 名字叫Cluster-1

    5.4 在Brokers下可以看到我们的kafka集群有哪些机器


    5.4 点击我们建立的Cluster的名字Cluster-1,可以看到下面有多少TopicsBrokers,怕有的同学不懂,简单解释下Kafkabroker可以理解是Kafka的一个服务,有几个Broker就有几个Kafka服务KafkaTopic我理解上是消息队列概念里的队列的意思,1个topic就是1个队列,消息都往topic里放,Topic下还有分区的概念,1个topic可以有多个分区, 这个我理解下来是将队列的数据分成几段去存储,便于多个消费者去消费。在补充下,分区还有副本的一个概念,就是在Kafka集群下一个分区在其他的kafka机器里也有它的副本,目的很明确某个机器挂了,其他机器上也有同样的数据可以保障kafka的高可用

    5.5 点击Topics ,可以看到我创建的Kafka的一些topic, 其中brokers下表示在哪几个Kafka服务里有此主题;Partitions是分区,表示当前的主题有几个分区

    这里的功能很多,可以进行topic的管理,包括topic的创建、查看与删除 topic生成与分配分区等操作,可以满足日常kafka的运维使用。

    相关文章

      网友评论

          本文标题:记录贴-Docker搭建Kafka集群

          本文链接:https://www.haomeiwen.com/subject/xabhpdtx.html