说明

使用docker搭建kafka 3.5 。
3.3版本引入了Apache Kafka Raft (KRaft)用来代替ZooKeeper,因此不需要搭建ZooKeeper了。
本文参考:https://juejin.cn/post/7319541661150330918(感谢!!!!)

配置

  • 创建对应数据目录并赋权
mdkir kafka/broker{1..3}
#给目录赋权,否则启动后提示(mkdir: cannot create directory '/bitnami/kafka/config': Permission denied)
chown -R 1001:1001 kafka/  
#查看目录权限
[root@localhost kafka]# ls -al
总用量 20
drwxr-xr-x 3 root root 4096 222 15:41 .
drwxr-xr-x 7 root root 4096 222 14:28 ..
-rw-r--r-- 1 root root 4811 222 15:41 docker-compose.yml
drwxr-xr-x 5 1001 1001 4096 222 15:28 kafka
  • 查看docker-compose 启动文件及其注意事项
less -N docker-compose.yml

version: "3"
services:
  kafka1:
    image: 'bitnami/kafka:3.5'
    container_name: kafka1
    ports:
      - "19092:9092"
      - "19093:9093"
    privileged: true    #不添加的话会启动报错(Failed to start thread "GC Thread#0" - pthread_create failed (EPERM) )
    environment:
      #允许使用kraft,即Kafka替代Zookeeper
      - KAFKA_ENABLE_KRAFT=yes
      - KAFKA_CFG_NODE_ID=1
      #kafka角色,做broker,也要做controller
      - KAFKA_CFG_PROCESS_ROLES=controller,broker
      #定义kafka服务端socket监听端口(Docker内部的ip地址和端口)
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
      # 定义外网访问地址,必须填写宿主机ip地址和端口,ip不能是0.0.0.0 
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://10.0.7.13:19092 
      #定义安全协议
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      #集群地址
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093
      #指定供外部使用的控制类请求信息
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      #设置broker最大内存,和初始内存
      - KAFKA_HEAP_OPTS=-Xmx512M -Xms256M
      #使用Kafka时的集群id,集群内的Kafka都要用这个id做初始化,生成一个UUID即可(22byte)
      - KAFKA_KRAFT_CLUSTER_ID=xYcCyHmJlIaLzLoBzVwIcP
      #允许使用PLAINTEXT监听器,默认false,不建议在生产环境使用
      #- ALLOW_PLAINTEXT_LISTENER=yes
      # 不允许自动创建主题
      - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=false
      #broker.id,必须唯一,且与KAFKA_CFG_NODE_ID一致
      - KAFKA_BROKER_ID=1
    volumes:
      - ./kafka/broker1:/bitnami/kafka:rw

  kafka2:
    image: 'bitnami/kafka:3.5'
    container_name: kafka2
    ports:
      - "29092:9092"
      - "29093:9093"
    privileged: true
    environment:
      #允许使用kraft,即Kafka替代Zookeeper
      - KAFKA_ENABLE_KRAFT=yes
      - KAFKA_CFG_NODE_ID=2
      #kafka角色,做broker,也要做controller
      - KAFKA_CFG_PROCESS_ROLES=controller,broker
      #定义kafka服务端socket监听端口(Docker内部的ip地址和端口)
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
      # 定义外网访问地址,必须填写宿主机ip地址和端口,ip不能是0.0.0.0 
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://10.0.7.13:29092
      #定义安全协议
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      #集群地址
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093      #指定供外部使用的控制类请求信息
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      #设置broker最大内存,和初始内存
      - KAFKA_HEAP_OPTS=-Xmx512M -Xms256M
      #使用Kafka时的集群id,集群内的Kafka都要用这个id做初始化,生成一个UUID即可(22byte)
      - KAFKA_KRAFT_CLUSTER_ID=xYcCyHmJlIaLzLoBzVwIcP
      #允许使用PLAINTEXT监听器,默认false,不建议在生产环境使用
      #- ALLOW_PLAINTEXT_LISTENER=yes
      # 不允许自动创建主题
      - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=false
      #broker.id,必须唯一,且与KAFKA_CFG_NODE_ID一致
      - KAFKA_BROKER_ID=2
    volumes:
      - ./kafka/broker2:/bitnami/kafka:rw

  kafka3:
    image: 'bitnami/kafka:3.5'
    container_name: kafka3
    ports:
      - "39092:9092"
      - "39093:9093"
    privileged: true
    environment:
      #允许使用kraft,即Kafka替代Zookeeper
      - KAFKA_ENABLE_KRAFT=yes
      - KAFKA_CFG_NODE_ID=3
      #kafka角色,做broker,也要做controller
      - KAFKA_CFG_PROCESS_ROLES=controller,broker
      #定义kafka服务端socket监听端口(Docker内部的ip地址和端口)
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
      # 定义外网访问地址,必须填写宿主机ip地址和端口,ip不能是0.0.0.0 
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://10.0.7.13:39092
      #定义安全协议
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      #集群地址
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093      #指定供外部使用的控制类请求信息
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      #设置broker最大内存,和初始内存
      - KAFKA_HEAP_OPTS=-Xmx512M -Xms256M
      #使用Kafka时的集群id,集群内的Kafka都要用这个id做初始化,生成一个UUID即可(22byte)
      - KAFKA_KRAFT_CLUSTER_ID=xYcCyHmJlIaLzLoBzVwIcP
      #允许使用PLAINTEXT监听器,默认false,不建议在生产环境使用
      - ALLOW_PLAINTEXT_LISTENER=yes
      # 不允许自动创建主题
      #- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=false
      #broker.id,必须唯一,且与KAFKA_CFG_NODE_ID一致
      - KAFKA_BROKER_ID=3
    volumes:
      - ./kafka/broker3:/bitnami/kafka:rw

启动

#集群启动
docker-compose up -d
#容器查看
[root@localhost kafka]# docker-compose ps -a
NAME      IMAGE               COMMAND                   SERVICE   CREATED          STATUS          PORTS
kafka1    bitnami/kafka:3.5   "/opt/bitnami/script…"   kafka1    25 minutes ago   Up 25 minutes   0.0.0.0:19092->9092/tcp, :::19092->9092/tcp, 0.0.0.0:19093->9093/tcp, :::19093->9093/tcp
kafka2    bitnami/kafka:3.5   "/opt/bitnami/script…"   kafka2    25 minutes ago   Up 25 minutes   0.0.0.0:29092->9092/tcp, :::29092->9092/tcp, 0.0.0.0:29093->9093/tcp, :::29093->9093/tcp
kafka3    bitnami/kafka:3.5   "/opt/bitnami/script…"   kafka3    25 minutes ago   Up 25 minutes   0.0.0.0:39092->9092/tcp, :::39092->9092/tcp, 0.0.0.0:39093->9093/tcp, :::39093->9093/tcp
[root@localhost kafka]
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐