docker下的Kafka分布式部署
在windows下(docker-desktop)进行docker分布式部署kafka环境时,遇到了部分网络问题,具体问题细节不清楚了。大致可以归结到端口映射上去。
如下,kafka内部端口为9092,不需要映射到容器外部。广播端口为19092,需要广播。
另外,在外部通信ip部分,为了便捷性,请尽量填写回环地址。实际生产环境虽然不推荐,但是这个可以避免你使用自身ip地址被自己电脑防火墙拦住的可能性(我被拦了)。windows开防火墙没了解过,也不想学,hhhh。已经被服务器的 网关安全组功能养成傻子了,可视化真好用。
services:
kafka1:
container_name: kafka1
image: bitnami/kafka:3.6.1
user: root
ports:
- "19092:19092" # 外部端口映射到外部监听器端口
- "19093:9093"
environment:
# 允许使用KRaft
- KAFKA_ENABLE_KRAFT=yes
- KAFKA_CFG_PROCESS_ROLES=broker,controller
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
# 定义监听器名称与安全协议的映射关系
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
# 定义监听器:内部网络用9092,外部网络用19092,控制器用9093
- KAFKA_CFG_LISTENERS=INTERNAL://:9092,EXTERNAL://:19092,CONTROLLER://:9093
# 定义宣告地址:内部用服务名,外部用宿主机IP
- KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka1:9092,EXTERNAL://localhost:19092
# 指定broker间通信使用内部监听器
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL
- KAFKA_CFG_NODE_ID=1
- KAFKA_KRAFT_CLUSTER_ID=iZWRiSqjZAlYwlKEqHFQWI
# 使用服务名作为控制器地址,更具弹性
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093
- ALLOW_PLAINTEXT_LISTENER=yes
# 设置broker最大内存和初始内存
- KAFKA_HEAP_OPTS=-Xmx512M -Xms256M
volumes:
# 挂载路径,标红处修改为自己的路径
- /E/dockers/volume/kafka/broker01:/bitnami/kafka:rw
networks:
netkafka:
ipv4_address: 172.23.0.11
kafka2:
container_name: kafka2
image: bitnami/kafka:3.6.1
user: root
ports:
- "29092:29092" # 外部端口映射到外部监听器端口
- "29093:9093"
environment:
- KAFKA_ENABLE_KRAFT=yes
- KAFKA_CFG_PROCESS_ROLES=broker,controller
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
# 定义监听器名称与安全协议的映射关系
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
# 定义监听器:内部网络用9092,外部网络用29092,控制器用9093
- KAFKA_CFG_LISTENERS=INTERNAL://:9092,EXTERNAL://:29092,CONTROLLER://:9093
# 定义宣告地址:内部用服务名,外部用宿主机IP
- KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka2:9092,EXTERNAL://localhost:29092
# 指定broker间通信使用内部监听器
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL
- KAFKA_CFG_NODE_ID=2
- KAFKA_KRAFT_CLUSTER_ID=iZWRiSqjZAlYwlKEqHFQWI # 三个节点保持一致
# 使用服务名作为控制器地址,更具弹性
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_HEAP_OPTS=-Xmx512M -Xms256M
volumes:
# 挂载路径,标红处修改为自己的路径
- /E/dockers/volume/kafka/broker02:/bitnami/kafka:rw
networks:
netkafka:
ipv4_address: 172.23.0.12
kafka3:
container_name: kafka3
image: bitnami/kafka:3.6.1
user: root
ports:
- "39092:39092" # 外部端口映射到外部监听器端口
- "39093:9093"
environment:
- KAFKA_ENABLE_KRAFT=yes
- KAFKA_CFG_PROCESS_ROLES=broker,controller
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
# 定义监听器名称与安全协议的映射关系
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
# 定义监听器:内部网络用9092,外部网络用39092,控制器用9093
- KAFKA_CFG_LISTENERS=INTERNAL://:9092,EXTERNAL://:39092,CONTROLLER://:9093
# 定义宣告地址:内部用服务名,外部用宿主机IP
- KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka3:9092,EXTERNAL://localhost:39092
# 指定broker间通信使用内部监听器
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL
- KAFKA_CFG_NODE_ID=3
- KAFKA_KRAFT_CLUSTER_ID=iZWRiSqjZAlYwlKEqHFQWI
# 使用服务名作为控制器地址,更具弹性
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_HEAP_OPTS=-Xmx512M -Xms256M
volumes:
# 挂载路径,标红处修改为自己的路径
- /E/dockers/volume/kafka/broker03:/bitnami/kafka:rw
networks:
netkafka:
ipv4_address: 172.23.0.13
networks:
netkafka:
external: true
driver: bridge
name: netkafka
ipam:
driver: default
config:
- subnet: 172.23.0.0/25
gateway: 172.23.0.1
许可协议:
CC BY 4.0