使用Docker-compose创建kafka集群

一.单台服务器集群
1.准备工作

单台机器:192.168.40.174

修改主机名称

vim /etc/hosts
192.168.40.174 kafka1
192.168.40.174 kafka2
192.168.40.174 kafka3
2. 编写docker-compose.yml文件
version: '3.7'
services:
  zookeeper:
    container_name: zookeeper
    hostname: zookeeper
    image: 'bitnami/zookeeper:3.7.0'
    restart: always
    ports:
      - 2181:2181
    user: root
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
    #      ALLOW_ANONYMOUS_LOGIN: yes


  kafka1:
    image: 'wurstmeister/kafka:2.13-2.7.0'
    container_name: kafka1
    hostname: kafka1
    ports:
      - "9091:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: "kafka1"
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'PLAINTEXT:PLAINTEXT'
      KAFKA_BROKER_ID: 0
      KAFKA_NUM_PARTITIONS: 3
      KAFKA_DEFAULT_REPLICATION_FACTOR: 2
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: "PLAINTEXT://kafka1:9092"
      KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://kafka1:9091'
      ALLOW_PLAINTEXT_LISTENER: "yes"
    volumes:
      - ./kafka/broker1/logs:/opt/kafka/logs
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    depends_on:
      - zookeeper


  kafka2:
    image: 'wurstmeister/kafka:2.13-2.7.0'
    container_name: kafka2
    hostname: kafka2
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: "kafka2"
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'PLAINTEXT:PLAINTEXT'
      KAFKA_BROKER_ID: 1
      KAFKA_NUM_PARTITIONS: 3
      KAFKA_DEFAULT_REPLICATION_FACTOR: 2
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: "PLAINTEXT://kafka2:9092"
      KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://kafka:9092'
      ALLOW_PLAINTEXT_LISTENER: "yes"
    volumes:
      - ./kafka/broker2/logs:/opt/kafka/logs
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    depends_on:
      - zookeeper
  

  kafka3:
    image: 'wurstmeister/kafka:2.13-2.7.0'
    container_name: kafka3
    hostname: kafka3
    ports:
      - "9093:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: "kafka3"
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'PLAINTEXT:PLAINTEXT'
      KAFKA_BROKER_ID: 2
      KAFKA_NUM_PARTITIONS: 3
      KAFKA_DEFAULT_REPLICATION_FACTOR: 2
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: "PLAINTEXT://kafka3:9092"
      KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://kafka:9093'
      ALLOW_PLAINTEXT_LISTENER: "yes"
    volumes:
      - ./kafka/broker3/logs:/opt/kafka/logs
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    depends_on:
      - zookeeper
3.运行kafka集群 
docker-compose up -d
二.3台服务器创建kafka集群
1.准备工作

三台服务器:192.168.40.174  192.168.40.175  192.168.40.176

修改主机名称:

vim /etc/hosts
192.168.40.174 kafka1
192.168.40.175 kafka2
192.168.40.176 kafka3
2.编写docker-compose.yml文件

192.168.40.174 机器

version: '3.7'
services:
  zookeeper:
    image: 'bitnami/zookeeper:3.7.0'
    container_name: 'docker_zookeeper'
    network_mode: host
    restart: always
    environment:
      ZOO_SERVER_ID: 1
      ZOO_PORT_NUMBER: 2181
      ALLOW_ANONYMOUS_LOGIN: 'true'
      ZOO_LISTEN_ALLIPS_ENABLED: 'true'
      ZOO_SERVERS: "kafka1:2888:3888,kafka2:2888:3888,kafka3:2888:3888"
    volumes:
      - ./zookeeper:/bitnami/zookeeper
      - /etc/localtime:/etc/localtime:ro
      - /etc/hosts:/etc/hosts:ro
    user: root

  kafka:
    image: 'wurstmeister/kafka:2.13-2.7.0'
    container_name: 'docker_kafka'
    network_mode: host
    restart: always
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_PORT: 9090
      KAFKA_ADVERTISED_HOST_NAME: "kafka1"
      ALLOW_PLAINTEXT_LISTENER: "yes"
      KAFKA_ZOOKEEPER_CONNECT: "kafka1:2181,kafka2:2181,kafka3:2181"
      KAFKA_LISTENERS: "PLAINTEXT://kafka1:9090"
      KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://kafka1:9090"
      KAFKA_SECURITY_INTER_BROKER_PROTOCOL: "PLAINTEXT"
      KAFKA_JMX_OPTS: "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.rmi.port=19095"
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
      KAFKA_DEFAULT_REPLICATION_FACTOR: 3
      KAFKA_NUM_PARTITIONS: 1
      JMX_PORT: 19095
    volumes:
      - ./kafka/kafa_data:/kafka
      - /etc/localtime:/etc/localtime:ro
      - /etc/hosts:/etc/hosts:ro

 192.168.40.175 机器

version: '3.7'
services:
  zookeeper:
    image: 'bitnami/zookeeper:3.7.0'
    container_name: 'docker_zookeeper'
    network_mode: host
    restart: always
    environment:
      ZOO_SERVER_ID: 2
      ZOO_PORT_NUMBER: 2181
      ALLOW_ANONYMOUS_LOGIN: 'true'
      ZOO_LISTEN_ALLIPS_ENABLED: 'true'
      ZOO_SERVERS: "kafka1:2888:3888,kafka2:2888:3888,kafka3:2888:3888"
    volumes:
      - ./zookeeper:/bitnami/zookeeper
      - /etc/localtime:/etc/localtime:ro
      - /etc/hosts:/etc/hosts:ro
    user: root

  kafka:
    image: 'wurstmeister/kafka:2.13-2.7.0'
    container_name: 'docker_kafka'
    network_mode: host
    restart: always
    environment:
      KAFKA_BROKER_ID: 2
      KAFKA_PORT: 9090
      KAFKA_ADVERTISED_HOST_NAME: "kafka2"
      ALLOW_PLAINTEXT_LISTENER: "yes"
      KAFKA_ZOOKEEPER_CONNECT: "kafka1:2181,kafka2:2181,kafka3:2181"
      KAFKA_LISTENERS: "PLAINTEXT://kafka2:9090"
      KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://kafka2:9090"
      KAFKA_SECURITY_INTER_BROKER_PROTOCOL: "PLAINTEXT"
      KAFKA_JMX_OPTS: "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.rmi.port=19095"
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
      KAFKA_DEFAULT_REPLICATION_FACTOR: 3
      KAFKA_NUM_PARTITIONS: 1
      JMX_PORT: 19095
    volumes:
      - ./kafka/kafa_data:/kafka
      - /etc/localtime:/etc/localtime:ro
      - /etc/hosts:/etc/hosts:ro

 192.168.40.176 机器

version: '3.7'
services:
  zookeeper:
    image: 'bitnami/zookeeper:3.7.0'
    container_name: 'docker_zookeeper'
    network_mode: host
    restart: always
    environment:
      ZOO_SERVER_ID: 3
      ZOO_PORT_NUMBER: 2181
      ALLOW_ANONYMOUS_LOGIN: 'true'
      ZOO_LISTEN_ALLIPS_ENABLED: 'true'
      ZOO_SERVERS: "-kafka1:2888:3888,kafka2:2888:3888,kafka3:2888:3888"
    volumes:
      - ./zookeeper:/bitnami/zookeeper
      - /etc/localtime:/etc/localtime:ro
      - /etc/hosts:/etc/hosts:ro
    user: root

  kafka:
    image: 'wurstmeister/kafka:2.13-2.7.0'
    container_name: 'docker_kafka'
    network_mode: host
    restart: always
    environment:
      KAFKA_BROKER_ID: 3
      KAFKA_PORT: 5302
      KAFKA_ADVERTISED_HOST_NAME: "kafka3"
      ALLOW_PLAINTEXT_LISTENER: "yes"
      KAFKA_ZOOKEEPER_CONNECT: "kafka1:2181,kafka2:2181,kafka3:2181"
      KAFKA_LISTENERS: "PLAINTEXT://kafka3:9090"
      KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://kafka3:9090"
      KAFKA_SECURITY_INTER_BROKER_PROTOCOL: "PLAINTEXT"
      KAFKA_JMX_OPTS: "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.rmi.port=19095"
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
      KAFKA_DEFAULT_REPLICATION_FACTOR: 3
      KAFKA_NUM_PARTITIONS: 1
      JMX_PORT: 19095
    volumes:
      - ./kafka/kafa_data:/kafka
      - /etc/localtime:/etc/localtime:ro
      - /etc/hosts:/etc/hosts:ro
3.创建与赋权zookeeper文件夹

如果不改变权限,会提示权限不够的报错,kafka不能正常运行,具体原因暂未解决,有知道原因的可以留言告诉作者。

mkdir zookeeper
chmod 777 -R zookeeper
 4.运行kafka集群

三台机器

docker-compose up -d
三.单台服务器部署kafka集群
version: '3.8'
services:
  videocloud-zookeeper:
    container_name: videocloud-zookeeper
    hostname: videocloud-zookeeper
    image: 'bitnami/zookeeper:3.7.0'
    restart: always
    ports:
      - 2181:2181
    user: root
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes


  videocloud-kafka1:
    image: 'wurstmeister/kafka:2.13-2.7.0'
    container_name: videocloud-kafka1
    hostname: videocloud-kafka1
    ports:
      - "5301:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: "videocloud-kafka1"
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'PLAINTEXT:PLAINTEXT'
      KAFKA_BROKER_ID: 0
      KAFKA_NUM_PARTITIONS: 3
      KAFKA_DEFAULT_REPLICATION_FACTOR: 2
      KAFKA_ZOOKEEPER_CONNECT: videocloud-zookeeper:2181
      KAFKA_LISTENERS: "PLAINTEXT://0.0.0.0:9092"
      KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://192.168.40.174:5301'
      ALLOW_PLAINTEXT_LISTENER: "yes"
    volumes:
      - ./kafka/broker1/logs:/opt/kafka/logs
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    depends_on:
      - videocloud-zookeeper


  videocloud-kafka2:
    image: 'wurstmeister/kafka:2.13-2.7.0'
    container_name: videocloud-kafka2
    hostname: videocloud-kafka2
    ports:
      - "5302:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: "videocloud-kafka2"
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'PLAINTEXT:PLAINTEXT'
      KAFKA_BROKER_ID: 1
      KAFKA_NUM_PARTITIONS: 3
      KAFKA_DEFAULT_REPLICATION_FACTOR: 2
      KAFKA_ZOOKEEPER_CONNECT: videocloud-zookeeper:2181
      KAFKA_LISTENERS: "PLAINTEXT://0.0.0.0:9092"
      KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://192.168.40.175:5302'
      ALLOW_PLAINTEXT_LISTENER: "yes"
    volumes:
      - ./kafka/broker2/logs:/opt/kafka/logs
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    depends_on:
      - videocloud-zookeeper
  

  videocloud-kafka3:
    image: 'wurstmeister/kafka:2.13-2.7.0'
    container_name: videocloud-kafka3
    hostname: videocloud-kafka3
    ports:
      - "5303:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: "videocloud-kafka3"
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'PLAINTEXT:PLAINTEXT'
      KAFKA_BROKER_ID: 2
      KAFKA_NUM_PARTITIONS: 3
      KAFKA_DEFAULT_REPLICATION_FACTOR: 2
      KAFKA_ZOOKEEPER_CONNECT: videocloud-zookeeper:2181
      KAFKA_LISTENERS: "PLAINTEXT://0.0.0.0:9092"
      KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://192.168.40.176:5303'
      ALLOW_PLAINTEXT_LISTENER: "yes"
    volumes:
      - ./kafka/broker3/logs:/opt/kafka/logs
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    depends_on:
      - videocloud-zookeeper

常见错误

1.Error:JMX  connector server communication error: service:jmx:rmi://localhost.localhost.local:19095

常见于创建集群后,进入容器内执行创建,查询的动作时,具体什么原因导致的暂不清楚,欢迎大家补充

解决方法:在容器内执行下面的命令

unset JMX_PORT 

这个错误本身不影响kafka集群的正常运作。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值