version: "3.7"
services:
  zookeeper:
    image: 'bitnami/zookeeper:latest'
    ports:
      - '2181:2181'
    environment:
      # 匿名登录--必须开启
      - ALLOW_ANONYMOUS_LOGIN=yes
  #volumes:
  #- ./zookeeper:/bitnami/zookeeper
  # 该镜像具体配置参考 https://github.com/bitnami/bitnami-docker-kafka/blob/master/README.md
  kafka:
    image: 'bitnami/kafka:2.8.0'
    container_name: 'small-kafka'
    ports:
      - '9092:9092'
      - '9999:9095'
    environment:
      - KAFKA_BROKER_ID=1
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
      # 客户端访问地址,更换成自己的
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://81.68.157.233:9092
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      # 允许使用PLAINTEXT协议(镜像中默认为关闭,需要手动开启)
      - ALLOW_PLAINTEXT_LISTENER=yes
      # 关闭自动创建 topic 功能
      - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=false
      # 全局消息过期时间 6 小时(测试时可以设置短一点)
      - KAFKA_CFG_LOG_RETENTION_HOURS=6
      # 开启JMX监控
      # - JMX_PORT=9999
    #volumes:
    #- ./kafka:/bitnami/kafka
    depends_on:
      - zookeeper
  # Web 管理界面 另外也可以用exporter+prometheus+grafana的方式来监控 https://github.com/danielqsj/kafka_exporter
  kafka_manager:
    image: 'hlebalbau/kafka-manager:latest'
    ports:
      - "9000:9000"
    environment:
      ZK_HOSTS: "zookeeper:2181"
      APPLICATION_SECRET: letmein
    depends_on:
      - zookeeper
      - kafka

配置服务器内网外网IP兼可以用的配置如下

version: '3.7'
services:
  zookeeper:
    image: wurstmeister/zookeeper:latest
    environment:
      # 时区上海
      TZ: Asia/Shanghai
    restart: always
    volumes:
      - ./data:/data
      - ./config/fastjson.properties:/opt/kafka/config/fastjson.properties
      - ./config/server.properties:/opt/kafka/config/server.properties
    ports:
      - 2181:2181
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 1G
        reservations:
          cpus: '0.5'
          memory: 200M

  kafka:
    image: wurstmeister/kafka:latest
    ports:
      - 9092:9092
      - 9093:9093
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 2G
        reservations:
          cpus: '0.5'
          memory: 200M
    environment:
      KAFKA_BROKER_ID: 0
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://172.16.0.20:9092,PLAINTEXT2://8.217.122.78:9093
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT2:PLAINTEXT
      #KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,PLAINTEXT2://0.0.0.0:9093
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,PLAINTEXT2://0.0.0.0:9093
      KAFKA_LISTENER_NAME_PLAINTEXT: PLAINTEXT
      KAFKA_LISTENER_NAME_PLAINTEXT2: PLAINTEXT2
      KAFKA_CREATE_TOPICS: "kafeidou:2:0"
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181      
      KAFKA_LOG_RETENTION_HOURS: 48
      KAFKA_NUM_PARTITIONS: 50            
      TZ: Asia/Shanghai
    restart: always
    volumes:
      - ./kafka-logs:/kafka
      - ./logs:/opt/kafka/logs
    depends_on:
      - zookeeper

其中环境变量配置块

    environment:
      KAFKA_BROKER_ID: 0
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://172.16.0.20:9092,PLAINTEXT2://8.217.122.78:9093
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT2:PLAINTEXT
      #KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,PLAINTEXT2://0.0.0.0:9093
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,PLAINTEXT2://0.0.0.0:9093
      KAFKA_LISTENER_NAME_PLAINTEXT: PLAINTEXT
      KAFKA_LISTENER_NAME_PLAINTEXT2: PLAINTEXT2
      KAFKA_CREATE_TOPICS: "kafeidou:2:0"
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181      
      KAFKA_LOG_RETENTION_HOURS: 48
      KAFKA_NUM_PARTITIONS: 50            
      TZ: Asia/Shanghai

environment另一种方式配置方式

    environment:
      KAFKA_BROKER_ID: 0
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_ADVERTISED_LISTENERS: INSIDE://172.16.0.20:9092,OUTSIDE://8.217.122.78:9093
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      #KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://172.16.0.53:9092
      KAFKA_CREATE_TOPICS: "kafeidou:2:0"   #kafka启动后初始化一个有2个partition(分区)0个副本名叫kafeidou的topic
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
      KAFKA_LOG_RETENTION_HOURS: 48
      KAFKA_NUM_PARTITIONS: 50
      TZ: Asia/Shanghai

注意格式
然后执行

docker-compose up -d
root@iZj6c1d1fx2ewr816fdneuZ:/data/docker-compose/kafka# docker-compose up -d
Pulling zookeeper (bitnami/zookeeper:latest)...
latest: Pulling from bitnami/zookeeper
4cead191622d: Pull complete
Digest: sha256:f4ade71ed3443007c376c3c545723e9a0e7d5257b4ddd35417a1522b8ffcaab0
Status: Downloaded newer image for bitnami/zookeeper:latest
Recreating kafka_zookeeper_1 ... done
Recreating kafka_kafka_1     ... done

给服务器开通9000端口,即可通过浏览器访问kafka 管理界面
docker exec -it small-kafka /bin/bash 打开客户端
kafka-topics.sh --create --zookeeper 127.0.0.1:2181 --replication-factor 1 --partitions 1 --topic small 创建topic=small

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐