• Docker部署单节点Kafka


    pull 拉取镜像

    wurstmeister/zookeeper Overview

    docker pull wurstmeister/zookeeper
    

    wurstmeister/kafka Overview

    docker pull wurstmeister/kafka
    

    部署单Broker

    定义 docker-compose-single-broker.yml:

    version: '3.8'
    services:
      zookeeper:
        image: wurstmeister/zookeeper
        ports:
          - "2181:2181"
      kafka:
        image: wurstmeister/kafka
        depends_on: [ zookeeper ]
        ports:
          - "9092:9092"
        environment:
          KAFKA_ADVERTISED_HOST_NAME: kafka
          KAFKA_CREATE_TOPICS: "test:1:1"
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
        volumes:
          - D:var
    undocker.sock:/var/run/docker.sock
    

    kafka 环境变量:

    • KAFKA_ADVERTISED_HOST_NAME:你可以修改主机名来以匹配docker主机IP。注意:如果要运行多个Broker,请不要使用localhost或127.0.0.1作为主机ip
    • KAFKA_CREATE_TOPICS:kafka-docker在创建期间自动在kafka中创建主题,例如 test:1:1 表示主题test包含1个分区和1个副本。
    • KAFKA_ZOOKEEPER_CONNECT:现在是强制的环境变量,表示kafka的zookeeper connect string。

    KAFKA_ADVERTISED_HOST_NAME: 192.168.220.150,类似这种 hostName用ip的,一直出错,关键报错信息如下:

    Error while fetching metadata with correlation id xxx {test=LEADER_NOT_AVAILABLE}

    修改为 KAFKA_ADVERTISED_HOST_NAME: kafka,验证可行!

    kafka depends-on:

    • 指定 zookeeper 在 kafka 前面启动。

    kafka volumes 卷映射:

    • 宿主机中的文件路径:容器中的文件路径,而我的宿主机是Windows主机。

    参考自 Github kafka-docker

    GitHub 上的文件 build: . 修改为 image: wurstmeister/kafka,修改前会出现以下错误:

    failed to solve with frontend dockerfile.v0: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount698554617/Dockerfile: no such file or directory
    ERROR: Service 'kafka' failed to build : Build failed

    启动与停止命令

    首先需要 cd 进入 docker-compose-single-broker.yml 所在目录:

    F:
    cd Dockerkafka
    

    启动命令:

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

    结尾不加 -d 会占用当前命令行窗口。因为按 Ctrl + C 会自动 stop 容器。

    停止命令:

    docker-compose -f docker-compose-single-broker.yml stop
    

    停止并删除容器命令:

    docker-compose -f docker-compose-single-broker.yml down
    

    测试验证:

    1、使用 docker ps 查看 zookeeper 和 kafka 容器是否已经正常运行:

    2、进入 kafka 容器控制台:

    docker exec -it kafka_kafka_1 bash
    

    3、进入 kafka 容器中的 bin 目录:

    cd $KAFKA_HOME/bin
    pwd
    

    pwd 用来打印当前工作目录,方便我们确认是否切换成功

    4、检查自动创建的主题 test:

    kafka-topics.sh --zookeeper kafka_zookeeper_1:2181 --describe --topic test
    

    5、在一个cmd窗口发布消息:

    kafka-console-producer.sh --topic=test --broker-list kafka_kafka_1:9092
    

    6、打开另一个cmd窗口,重复1-3步,订阅消息:

    kafka-console-consumer.sh --bootstrap-server kafka_kafka_1:9092 --from-beginning --topic test
    

    参考文档

    • Compose file version 3 reference 阅读
    • Use volumes 阅读
    • kafka-docker 阅读
    • docker部署kafka 阅读
    • Error while fetching metadata with correlation id : {LEADER_NOT_AVAILABLE} 正确处理姿势 阅读

    关于 broker.id=-1:

    参考自 Kafka参数broker.id详解 阅读

    一开始我以为config/server.properties 中 broker.id=-1 有问题;但是实际上,这是合法的。因为真正的 broker.id 会保存在 log.dir 目录下的 meta.properties 中。这个文件在kafka启动时创建。

    首先,我们进入 zookeeper 容器,并打开 zookeeper 客户端:

    D:>docker exec -it kafka_zookeeper_1 bash
    root@f4d9db43d301:/opt/zookeeper-3.4.13# bin/zkCli.sh
    

    接着查看结点信息:

    [zk: localhost:2181(CONNECTED) 0] ls /brokers/ids
    [1001]
    

    我们看到存在一个id为1001的节点。

    但是,我们进入 kafka 容器,并查看 server.properties 中的 broker.id 属性:

    F:Dockerkafka>docker exec -it kafka_kafka_1 bash
    bash-5.1# cd $KAFKA_HOME
    bash-5.1# cat config/server.properties | grep broker.id
    broker.id=-1
    

    那真的表示不对应吗?答案是否定的。

    还是在 kafka 容器中,查看 server.properties 中的 log.dirs 属性:

    bash-5.1# cat config/server.properties | grep log.dirs
    log.dirs=/kafka/kafka-logs-8ea8aa68e5a5
    

    顺藤摸瓜,查看日志文件夹下的 meta.properties 中的 broker.id 属性:

    bash-5.1# cat /kafka/kafka-logs-8ea8aa68e5a5/meta.properties
    #
    #Thu Aug 12 08:43:58 GMT 2021
    cluster.id=vAGFzDVHRLu_06_1DM03Og
    version=0
    broker.id=1001
    

    所以,kafka节点的id 以 log文件夹下的 meta.properties 中的 broker.id为准。

  • 相关阅读:
    如何用JS判断身份证格式
    ELK+log4j笔记
    JQM进阶:page事件执行过程
    jqm入门页面及对话框
    windows下mongodb的安装
    Bootstarp相关类
    兼容性及相关问题总结
    浏览器加载和渲染html的顺序
    【转】关于top、clientTop、scrollTop、offsetTop等
    pl_sql操作--激活提升权限scott用户
  • 原文地址:https://www.cnblogs.com/kendoziyu/p/15129948.html
Copyright © 2020-2023  润新知