说明
使用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 2月 22 15:41 .
drwxr-xr-x 7 root root 4096 2月 22 14:28 ..
-rw-r--r-- 1 root root 4811 2月 22 15:41 docker-compose.yml
drwxr-xr-x 5 1001 1001 4096 2月 22 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]