【在 macOS 系统上使用 Docker 启动 Kafka 的完整指南】

🐳 一、前提条件

  1. 安装 Docker Desktop for Mac

  2. 确认 Docker 正常运行

bash 复制代码
docker --version
docker-compose --version

🚀 二、方式一:使用 Docker Compose(推荐)

1. 创建 docker-compose.yml 文件

yaml 复制代码
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. 启动服务

bash 复制代码
# 在 docker-compose.yml 所在目录执行
docker-compose up -d

3. 验证 Kafka 是否启动成功

bash 复制代码
# 查看运行中的容器
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. 启动消费者

bash 复制代码
docker exec -it kafka kafka-console-consumer --topic test-topic --bootstrap-server localhost:9092

2. 启动生产者并发送消息

bash 复制代码
docker exec -it kafka kafka-console-producer --topic test-topic --bootstrap-server localhost:9092

然后输入消息,按回车发送,观察消费者端是否收到。


🛠️ 四、方式二:单独使用 Docker 命令

如果你不想用 docker-compose,也可以分别启动 Zookeeper 和 Kafka:

1. 启动 Zookeeper

bash 复制代码
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"

或者更简单的方式:

bash 复制代码
docker run -d \
  --name zookeeper \
  -p 2181:2181 \
  confluentinc/cp-zookeeper:latest

2. 启动 Kafka

bash 复制代码
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 命令(在容器内执行)

bash 复制代码
# 进入容器
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

🛑 六、停止和清理

停止服务

bash 复制代码
# docker-compose 方式
docker-compose down

# 单独容器方式
docker stop kafka zookeeper
docker rm kafka zookeeper

清理数据(可选)

bash 复制代码
docker volume prune

📝 七、Spring Boot 配置对应的 Kafka 地址

在你的 application.yml 中:

yaml 复制代码
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 监控和日志配置
相关推荐
總鑽風4 小时前
搭建Spring Boot + ELK日志平台,实现可视化日志监控
spring boot·elk·macos
功德+n4 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
小敬爱吃饭5 小时前
Ragflow Docker部署及问题解决方案(界面为Welcome to nginx,ragflow上传文件失败,Docker中的ragflow-cpu-1一直重启)
人工智能·python·nginx·docker·语言模型·容器·数据挖掘
木子欢儿6 小时前
Docker Hub 镜像发布指南
java·spring cloud·docker·容器·eureka
Devin~Y6 小时前
高并发电商与AI智能客服场景下的Java面试实战:从Spring Boot到RAG与向量数据库落地
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
coppher7 小时前
Ubuntu 22.04 amd64 离线安装 Docker 完整教程
linux·docker
bloglin999999 小时前
docker logs 如何一直监听日志输出
运维·docker·容器
说实话起个名字真难啊10 小时前
Docker 入门之网络基础
网络·docker·php
半桶水专家10 小时前
kafka数据删除策略详解
分布式·kafka
Jackyzhe10 小时前
从零学习Kafka:位移与高水位
分布式·学习·kafka