本文使用 Bitnami/Kafka 提供的kafka容器镜像。详情参考:bitnami/kafka - Docker 镜像 |Docker 中心
创建Docker Compose文件
创建一个名为 docker-compose.yml 的文件,并复制以下内容
javascript
version: "3.8"
services:
zookeeper:
image: docker.io/bitnami/zookeeper:3.9
container_name: zookeeper
restart: always
ports:
- "2181:2181"
volumes:
- "zookeeper_data:/usr/local/software/data/zookeeper"
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
networks:
- m-kafka-network
kafka:
image: docker.io/bitnami/kafka:3.4
container_name: kafka
restart: always
ports:
- "9092:9092"
volumes:
- "kafka_data:/usr/local/software/data/kafka"
environment:
- KAFKA_BROKER_ID=1
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT
- KAFKA_CFG_LISTENERS=PLAINTEXT://0.0.0.0:9092
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092
networks:
- m-kafka-network
depends_on:
- zookeeper
kafdrop:
image: obsidiandynamics/kafdrop
container_name: kafdrop
restart: always
ports:
- "9000:9000"
environment:
KAFKA_BROKERCONNECT: "kafka:9092"
networks:
- m-kafka-network
depends_on:
- kafka
volumes:
kafka_data:
driver: local
zookeeper_data:
driver: local
networks:
m-kafka-network:
部分参数解释:
1、KAFKA_CFG_LISTENERS:
设置为 PLAINTEXT://0.0.0.0:9092 允许 Kafka 从任何 IP 地址接受连接。
2、ALLOW_PLAINTEXT_LISTENER=yes
这个参数允许 Kafka 接受未加密的连接,即使用 PLAINTEXT 协议的连接。这对于测试环境很有用,但在生产环境中,通常建议使用加密的连接(如 SSL/TLS)来保证数据安全。
验证配置:
javascript
docker-compose -f docker-compose.yml config
启动服务
执行命令
javascript
docker-compose up -d
执行结果
查看是否启动
javascript
docker-compose ps
执行结果
如果服务未启动,可以执行下面命令查看日志
javascript
docker-compose logs
验证服务
浏览器访问 kafdrop 服务地址:127.0.0.1:9000 ,并创建一个Topic。
停止服务
执行命令
javascript
docker-compose stop
如果想停止并删除所有由 docker-compose.yml 定义的容器,网络和其他资源,执行
javascript
docker-compose down