🐳 一、前提条件
安装 Docker Desktop for Mac
- 下载地址:https://www.docker.com/products/docker-desktop
- 安装并启动 Docker
确认 Docker 正常运行
docker --version
docker-compose --version
🚀 二、方式一:使用 Docker Compose(推荐)
1. 创建 docker-compose.yml
文件
version: '3.8'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
container_name: zookeeper
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- "2181:2181"
kafka:
image: confluentinc/cp-kafka:latest
container_name: kafka
depends_on:
- zookeeper
ports:
- "9092:9092"
- "9093:9093"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9093,EXTERNAL://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_AUTO_CREATE_TOPICS_ENABLE: true
2. 启动服务
# 在 docker-compose.yml 所在目录执行
docker-compose up -d
3. 验证 Kafka 是否启动成功
# 查看运行中的容器
docker ps
# 进入 Kafka 容器
docker exec -it kafka bash
# 创建测试 topic
kafka-topics --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
# 列出所有 topic
kafka-topics --list --bootstrap-server localhost:9092
🧪 三、测试 Kafka 连通性
1. 启动消费者
docker exec -it kafka kafka-console-consumer --topic test-topic --bootstrap-server localhost:9092
2. 启动生产者并发送消息
docker exec -it kafka kafka-console-producer --topic test-topic --bootstrap-server localhost:9092
然后输入消息,按回车发送,观察消费者端是否收到。
🛠️ 四、方式二:单独使用 Docker 命令
如果你不想用 docker-compose,也可以分别启动 Zookeeper 和 Kafka:
1. 启动 Zookeeper
docker run -d \
--name zookeeper \
-p 2181:2181 \
confluentinc/cp-zookeeper:latest \
bash -c "echo 'clientPort=2181' > zookeeper.properties && echo 'dataDir=/var/lib/zookeeper/data' >> zookeeper.properties && echo 'dataLogDir=/var/lib/zookeeper/log' >> zookeeper.properties && zookeeper-server-start zookeeper.properties"
或者更简单的方式:
docker run -d \
--name zookeeper \
-p 2181:2181 \
confluentinc/cp-zookeeper:latest
2. 启动 Kafka
docker run -d \
--name kafka \
--link zookeeper \
-p 9092:9092 \
-e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \
-e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \
confluentinc/cp-kafka:latest
🔧 五、常用 Kafka 命令(在容器内执行)
# 进入容器
docker exec -it kafka bash
# 创建 topic
kafka-topics --create --topic my-topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1
# 查看所有 topics
kafka-topics --list --bootstrap-server localhost:9092
# 查看 topic 详情
kafka-topics --describe --topic my-topic --bootstrap-server localhost:9092
# 发送消息
kafka-console-producer --topic my-topic --bootstrap-server localhost:9092
# 消费消息
kafka-console-consumer --topic my-topic --bootstrap-server localhost:9092 --from-beginning
# 查看消费者组
kafka-consumer-groups --bootstrap-server localhost:9092 --list
🛑 六、停止和清理
停止服务
# docker-compose 方式
docker-compose down
# 单独容器方式
docker stop kafka zookeeper
docker rm kafka zookeeper
清理数据(可选)
docker volume prune
📝 七、Spring Boot 配置对应的 Kafka 地址
在你的 application.yml
中:
spring:
kafka:
bootstrap-servers: localhost:9092
# 其他配置...
✅ 八、验证连接
启动你的 Spring Boot 应用后,可以通过 Swagger UI 测试 Kafka 消息发送:
http://localhost:8080/swagger-ui.html
可进一步扩展内容:
- Kafka Manager (Confluent Control Center) 部署
- 多 Broker Kafka 集群部署
- Kafka 数据持久化配置
- Kafka 监控和日志配置