version: "3.7"
networks:
default:
external: true
name: skNet
x-image: &x-image
image: bitnami/kafka:3.2.3
x-common: &x-common
<<: *x-image
user: root
networks:
- default
services:
kafka1:
<<: *x-common
container_name: kafka1
ports:
- 9192:9092
- 9193:9093
environment:
### 通用配置
# 允许使用kraft,即Kafka替代Zookeeper
- KAFKA_ENABLE_KRAFT=yes
# kafka角色,做broker,也要做controller
- KAFKA_CFG_PROCESS_ROLES=broker,controller
# 指定供外部使用的控制类请求信息
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
# 定义kafka服务端socket监听端口
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
# 定义安全协议
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
# 使用Kafka时的集群id,集群内的Kafka都要用这个id做初始化,生成一个UUID即可
- KAFKA_KRAFT_CLUSTER_ID=LelM2dIFQkiUFvXCEcqRWA
# 集群地址
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093
# 允许使用PLAINTEXT监听器,默认false,不建议在生产环境使用
- ALLOW_PLAINTEXT_LISTENER=yes
# 设置broker最大内存,和初始内存
- KAFKA_HEAP_OPTS=-Xmx512M -Xms256M
# 不允许自动创建主题
#- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=false
### broker配置
# 定义外网访问地址(宿主机ip地址和端口)
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://10.10.10.200:9192
#- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
# broker.id,必须唯一
- KAFKA_BROKER_ID=1
- KAFKA_CFG_NODE_ID=1
volumes:
- /mnt/sk-w/Docker/kafka/data/kafka1:/bitnami/kafka
#extra_hosts:
#- "kafka1:云服务器IP"
#- "kafka2:云服务器IP"
#- "kafka3:云服务器IP"
kafka2:
<<: *x-common
container_name: kafka2
ports:
- 9292:9092
- 9293:9093
environment:
### 通用配置
# 允许使用kraft,即Kafka替代Zookeeper
- KAFKA_ENABLE_KRAFT=yes
# kafka角色,做broker,也要做controller
- KAFKA_CFG_PROCESS_ROLES=broker,controller
# 指定供外部使用的控制类请求信息
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
# 定义kafka服务端socket监听端口
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
# 定义安全协议
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
# 使用Kafka时的集群id,集群内的Kafka都要用这个id做初始化,生成一个UUID即可
- KAFKA_KRAFT_CLUSTER_ID=LelM2dIFQkiUFvXCEcqRWA
# 集群地址
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093
# 允许使用PLAINTEXT监听器,默认false,不建议在生产环境使用
- ALLOW_PLAINTEXT_LISTENER=yes
# 设置broker最大内存,和初始内存
- KAFKA_HEAP_OPTS=-Xmx512M -Xms256M
# 不允许自动创建主题
#- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=false
### broker配置
# 定义外网访问地址(宿主机ip地址和端口)
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://10.10.10.200:9292
# broker.id,必须唯一
- KAFKA_BROKER_ID=2
- KAFKA_CFG_NODE_ID=2
volumes:
- /mnt/sk-w/Docker/kafka/data/kafka2:/bitnami/kafka
#extra_hosts:
#- "kafka1:云服务器IP"
#- "kafka2:云服务器IP"
#- "kafka3:云服务器IP"
kafka3:
<<: *x-common
container_name: kafka3
ports:
- 9392:9092
- 9393:9093
environment:
### 通用配置
# 允许使用kraft,即Kafka替代Zookeeper
- KAFKA_ENABLE_KRAFT=yes
# kafka角色,做broker,也要做controller
- KAFKA_CFG_PROCESS_ROLES=broker,controller
# 指定供外部使用的控制类请求信息
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
# 定义kafka服务端socket监听端口
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
# 定义安全协议
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
# 使用Kafka时的集群id,集群内的Kafka都要用这个id做初始化,生成一个UUID即可
- KAFKA_KRAFT_CLUSTER_ID=LelM2dIFQkiUFvXCEcqRWA
# 集群地址
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093
# 允许使用PLAINTEXT监听器,默认false,不建议在生产环境使用
- ALLOW_PLAINTEXT_LISTENER=yes
# 设置broker最大内存,和初始内存
- KAFKA_HEAP_OPTS=-Xmx512M -Xms256M
# 不允许自动创建主题
#- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=false
### broker配置
# 定义外网访问地址(宿主机ip地址和端口)
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://10.10.10.200:9392
# broker.id,必须唯一
- KAFKA_BROKER_ID=3
- KAFKA_CFG_NODE_ID=3
volumes:
- /mnt/sk-w/Docker/kafka/data/kafka3:/bitnami/kafka
#extra_hosts:
#- "kafka1:云服务器IP"
#- "kafka2:云服务器IP"
#- "kafka3:云服务器IP"
# web 管理界面
kafka-ui:
image: provectuslabs/kafka-ui:latest
container_name: kafka-ui
restart: always
ports:
- 9091:8080
volumes:
- /etc/localtime:/etc/localtime:ro
environment:
# 集群名称
- KAFKA_CLUSTERS_0_NAME=local
# 集群地址
- KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=10.10.10.200:9192,10.10.10.200:9292,10.10.10.200:9392
# 集群名称
#- KAFKA_CLUSTERS_1_NAME=cluster
# 集群地址
#- KAFKA_CLUSTERS_1_BOOTSTRAPSERVERS=10.10.10.200:9192,10.10.10.200:9292,10.10.10.200:9392