• 使用docker-compose部署Kafka集群


      之前写过Kafka集群的部署,不过那是基于宿主机的,地址:Kafka基础教程(二):Kafka安装

      和Zookeeper一样,有时想简单的连接Kafka用一下,那就需要开好几台虚拟机,如果Zookeeper部署在其他地方,那还得多开几台,用完还得关掉,否则太占内存,而且这样操作甚是繁琐。

      于是我想了一下,可以使用docker来搭建一个简单的Zookeeper和Kafak集群,上一篇说了Zookeeper集群的docker实现(使用docker或者docker-compose部署Zookeeper集群),现在说说使用Kafka集群的docker实现。

      首先,我们需要安装docker(参考:docker简单安装

      接下来我们需要镜像,不幸的是,Kafka没有官方镜像,那我们可以自己做一个,或者使用已经做好的镜像,比如dockerhub上Star最多的wurstmeister/kafka:

      

      由于Kafka需要Zookeeper,如果直接使用docker命令行来操作,那也是一个麻烦事,所以我采用了docker-compose来实现,虽然看GitHub上的教程(点击跳转),不过还是遇到了很多坑。

      先将镜像pull下来:  

        # Zookeeper
        sudo docker pull wurstmeister/zookeeper
        # Kafka
        sudo docker pull wurstmeister/kafka

      然后创建一个空目录,创建一个 docker-compose.yml ,根据GitHub上的教程,如果只启动单节点,那么 docker-compose.yml 内容如下:      

    # yaml 配
    version: '2'
    services:
        zookeeper:
            image: wurstmeister/zookeeper
            restart: always
            ports:
                - 2181:2181
        kafka:
            image: wurstmeister/kafka
            restart: always
            depends_on:
                - zookeeper
            ports:
                - 9092:9092
            environment:
                KAFKA_ADVERTISED_HOST_NAME: kafka
                KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
                KAFKA_LISTENERS: PLAINTEXT://:9092
                KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.209.128:9092
                KAFKA_BROKER_ID: 1
            volumes:
                - /var/run/docker.sock:/var/run/docker.sock

      如果是要一个kafka集群,那么 docker-compose.yml 内容如下:  

    # yaml 配
    version: '2'
    services:
        zookeeper:
            image: wurstmeister/zookeeper
            restart: always
            ports:
                - 2181:2181
        kafka1:
            image: wurstmeister/kafka
            restart: always
            depends_on:
                - zookeeper
            ports:
                - 9093:9093
            environment:
                KAFKA_ADVERTISED_HOST_NAME: kafka1
                KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
                KAFKA_LISTENERS: PLAINTEXT://:9093
                KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.209.128:9093
                KAFKA_BROKER_ID: 1
            volumes:
                - /var/run/docker.sock:/var/run/docker.sock
        kafka2:
            image: wurstmeister/kafka
            restart: always
            depends_on:
                - zookeeper
            ports:
                - 9094:9094
            environment:
                KAFKA_ADVERTISED_HOST_NAME: kafka2
                KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
                KAFKA_LISTENERS: PLAINTEXT://:9094
                KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.209.128:9094
                KAFKA_BROKER_ID: 2
            volumes:
                - /var/run/docker.sock:/var/run/docker.sock
        kafka3:
            image: wurstmeister/kafka
            restart: always
            depends_on:
                - zookeeper
            ports:
                - 9095:9095
            environment:
                KAFKA_ADVERTISED_HOST_NAME: kafka3
                KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
                KAFKA_LISTENERS: PLAINTEXT://:9095
                KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.209.128:9095
                KAFKA_BROKER_ID: 3
            volumes:
                - /var/run/docker.sock:/var/run/docker.sock

      另外,还有几个环境变量需要说明一下:  

        KAFKA_ADVERTISED_HOST_NAME:广播主机名称,一般用IP指定
        KAFKA_ZOOKEEPER_CONNECT:Zookeeper连接地址,格式:zoo1:port1,zoo2:port2:/path
        KAFKA_LISTENERS:Kafka启动所使用的的协议及端口
        KAFKA_ADVERTISED_LISTENERS:Kafka广播地址及端口,也就是告诉客户端,使用什么地址和端口能连接到Kafka,这个很重要,如果不指定,宿主机以外的客户端将无法连接到Kafka,比如我这里因为容器与宿主机做了端口映射,所以广播地址采用的是宿主机的地址及端口,告诉客户端只要连接到宿主机的指定端口就行了
        KAFKA_BROKER_ID:指定BrokerId,如果不指定,将会自己生成

      接着创建容器并启动:  

        # 创建并启动容器,可以使用 -f 参数指定docker-compose.yml文件
        sudo docker-compose up -d
        # 查看状态
        sudo docker-compose ps
        # 停止并删除容器,可以使用 -f 参数指定docker-compose.yml文件
        sudo docker-compose down

      查看状态,虽然集群启动了,但是记得连接要使用宿主机的地址和端口来连接。  

    一个专注于.NetCore的技术小白
  • 相关阅读:
    IPC之msgutil.c源码解读
    IPC之msg.c源码解读
    IPC之mqueue.c源码解读
    从锅炉工到AI专家(10)
    从锅炉工到AI专家(9)
    从锅炉工到AI专家(8)
    从锅炉工到AI专家(7)
    从锅炉工到AI专家(6)
    从锅炉工到AI专家(5)
    从锅炉工到AI专家(4)
  • 原文地址:https://www.cnblogs.com/shanfeng1000/p/14638455.html
Copyright © 2020-2023  润新知