docker 部署kafka 集群docker-composeyml 怎么写
以下是一个简单的docker-compose.yml文件示例,用于部署一个包含3个Kafka节点的Kafka集群:
version: '3'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
ports:
- "2181:2181"
kafka1:
image: wurstmeister/kafka
container_name: kafka1
depends_on:
- zookeeper
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka1:29092,EXTERNAL://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_BROKER_ID: 1
volumes:
- /var/run/docker.sock:/var/run/docker.sock
kafka2:
image: wurstmeister/kafka
container_name: kafka2
depends_on:
- zookeeper
ports:
- "9093:9092"
environment:
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka2:29092,EXTERNAL://localhost:9093
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_BROKER_ID: 2
volumes:
- /var/run/docker.sock:/var/run/docker.sock
kafka3:
image: wurstmeister/kafka
container_name: kafka3
depends_on:
- zookeeper
ports:
- "9094:9092"
environment:
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka3:29092,EXTERNAL://localhost:9094
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_BROKER_ID: 3
volumes:
- /var/run/docker.sock:/var/run/docker.sock
该文件定义了4个服务:zookeeper、kafka1、kafka2、kafka3。其中zookeeper服务使用wurstmeister/zookeeper镜像,用于提供Kafka所需的协调服务。kafka1、kafka2、kafka3服务则使用wurstmeister/kafka镜像,用于提供Kafka节点服务。
在这个示例中,使用了Kafka的多个监听器机制,以便Kafka节点可以在内部(即容器之间)和外部(即容器和主机之间)进行通信。每个Kafka节点都有一个唯一的ID,可以通过KAFKA_BROKER_ID环境变量进行设置。
为了确保Kafka节点可以在容器之间进行通信,需要将Docker套接字(/var/run/docker.sock)挂载到每个Kafka节点容器中。
此外,还需要在主机上安装Docker和Docker Compose,并在命令行中执行以下命令启动Kafka集群:
docker-compose up -d
这将启动所有服务,并将它们放在后台运行。Kafka集群现在应该可以通过localhost:9092、localhost:9093和localhost:9094访问
原文地址: https://www.cveoy.top/t/topic/cpzB 著作权归作者所有。请勿转载和采集!