【在 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 监控和日志配置
相关推荐
AI创界者3 小时前
PilotTTS 一键整合包(Win/Mac):8G 显存畅跑,实测解锁情绪与副语言的精准控制
人工智能·macos·aigc·音视频
Alsn863 小时前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
程序员老赵6 小时前
服务器没有桌面?Docker 跑个 Chrome,浏览器就能远程用
docker·容器·devops
杨浦老苏7 小时前
轻量级Docker仪表板Servedash
运维·docker·监控·群晖·仪表板
正经教主7 小时前
【docker基础】 第八周:容器监控与应用更新策略
运维·docker·容器
AirDroid_cn7 小时前
系统终端与iTerm2字体看起来不一样?macOS Sequoia统一渲染指南
macos
kiros_wang7 小时前
Docker 使用完整指南
运维·docker·容器
正经教主7 小时前
【docker基础】第九周:Docker安全与镜像优化
运维·docker·容器
CodeStats10 小时前
【虚拟机】 从 CPU 指令到虚拟机隔离:虚拟机就是一个“模拟了完整硬件的普通进程”
java·docker
ai产品老杨10 小时前
突破安防碎片化:基于 Docker 与边缘计算的 AI 视频智能化中台,如何通过 GB28181/RTSP 统一接入与全套源码交付实现二次开发自由?
人工智能·docker·边缘计算