要使用 docker-compose 创建 Kafka 集群,需要编写一个 docker-compose.yml
文件,其中包含 Kafka 服务的定义和配置。
以下是一个简单的 docker-compose.yml
文件,包含 3 个 Kafka 服务和 1 个 ZooKeeper 服务的定义:
version: '3'
services:
zookeeper:
image: 'zookeeper:3.5'
ports:
- '2181:2181'
kafka-1:
image: 'wurstmeister/kafka:2.12-2.5.0'
depends_on:
- zookeeper
ports:
- '9091:9091'
environment:
KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://localhost:9091
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_BROKER_ID: 1001
volumes:
- './kafka-1/logs:/opt/kafka/logs'
- './kafka-1/data:/opt/kafka/data'
networks:
- kafka-net
kafka-2:
image: 'wurstmeister/kafka:2.12-2.5.0'
depends_on:
- zookeeper
ports:
- '9092:9092'
environment:
KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_BROKER_ID: 1002
volumes:
- './kafka-2/logs:/opt/kafka/logs'
- './kafka-2/data:/opt/kafka/data'
networks:
- kafka-net
kafka-3:
image: 'wurstmeister/kafka:2.12-2.5.0'
depends_on:
- zookeeper
ports:
- '9093:9093'
environment:
KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://localhost:9093
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_BROKER_ID: 1003
volumes:
- './kafka-3/logs:/opt/kafka/logs'
- './kafka-3/data:/opt/kafka/data'
networks:
- kafka-net
networks:
kafka-net:
在上面的 docker-compose.yml
文件中,共定义了 4 个服务:
zookeeper
:一个 ZooKeeper 服务,用于协调 Kafka 集群的节点之间的通信。kafka-1
、kafka-2
和kafka-3
:三个 Kafka 服务,分别代表 Kafka 集群的三个节点。kafka-net
:一个自定义的 Docker 网络,用于连接 Kafka 节点和 ZooKeeper 节点。
上述 Kafka 服务的配置包含以下内容:
depends_on
:用于指定服务之间的依赖关系。在此例中,Kafka 服务依赖于 ZooKeeper 服务。ports
:指定服务的端口号,用于外部访问 Kafka 集群。environment
:通过环境变量设置 Kafka 的配置选项,例如KAFKA_ZOOKEEPER_CONNECT
指定 ZooKeeper 服务的地址和端口号。volumes
:指定挂载数据卷的路径,用于将 Kafka 日志和数据保存到本地磁盘上。networks
:指定服务所在的 Docker 网络。
Kafka 集群启动后,可以通过命令 docker-compose up
启动服务。或者使用 docker-compose up -d
启动服务,并将服务放入后台运行。
运行完 docker-compose up
命令后,可以使用以下命令验证 Kafka 集群的运行状况:
docker exec -it <kafka-1-container-id> kafka-topics --create --topic test-topic \
--partitions 3 --replication-factor 3 --bootstrap-server kafka-1:9092,kafka-2:9092,kafka-3:9092
docker exec -it <kafka-1-container-id> kafka-console-producer --topic test-topic --bootstrap-server kafka-1:9092
docker exec -it <kafka-2-container-id> kafka-console-consumer --topic test-topic --from-beginning --bootstrap-server kafka-1:9092,kafka-2:9092,kafka-3:9092
这些命令用于创建一个名为 test-topic
的 Kafka 主题,并在此主题上进行生产者和消费者测试。验证成功后,即可将 Kafka 集群集成到应用程序中。