docker搭建kafka集群

本文详细介绍了如何使用Docker构建Kafka3.5集群,重点在于3.3版本引入的KRaft取代ZooKeeper,以及如何配置docker-compose文件以确保正确启动和权限设置。
摘要由CSDN通过智能技术生成

说明

使用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]
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值