Docker 部署 Kafka 集群:使用 Docker Compose 配置示例
以下是一个简单的 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/nu9k 著作权归作者所有。请勿转载和采集!