文章目錄
- 前言
- 🐳 一、使用純 Kafka + Kafka-UI (無 Zookeeper)Docker 配置
- 🚀 啟動步驟
- ? 服務啟動后地址
- 🔥 注意事項(使用 Kraft)
- ? NestJS Kafka 連接不變
- 🧠 額外補充
- 📦 kafka/README.md 內容:
- Kafka Kraft 模式部署指南
- 🐳 使用 Docker-Compose 快速啟動
- 🌐 服務地址
- 🛠? 常用運維指令
- 查看所有容器狀態
- 查看 Kafka UI 日志
- 查看 Kafka Broker 日志
- 創建 Topic(進入 Kafka 容器內部執行)
- 查看 Topic 列表
- 查看 Topic 消息
- ? NestJS 配置 Kafka
- 🚨 注意事項
前言
? 使用 不需要 Zookeeper 的 Kafka —— 那就是 Kafka KRaft 模式(KRaft = Kafka Raft Metadata Mode),從 Kafka 2.8+ 起官方支持,3.3+ 開始默認推薦。
這樣可以:
- 去掉 zookeeper 依賴
- 簡化部署,性能更高
- 更符合現在 Kafka 的新一代標準架構
🐳 一、使用純 Kafka + Kafka-UI (無 Zookeeper)Docker 配置
這里直接給你新版 docker-compose.yml
(最新流行寫法)👇:
version: '3.8'services:kafka:image: bitnami/kafka:3.6container_name: kafkaports:- '9092:9092'environment:- KAFKA_CFG_NODE_ID=0 - KAFKA_CFG_PROCESS_ROLES=broker,controller- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER- KAFKA_CFG_LOG_DIRS=/bitnami/kafka/data- KAFKA_KRAFT_CLUSTER_ID=替換成base64的uuid- ALLOW_PLAINTEXT_LISTENER=yesvolumes:- kafka_data:/bitnami/kafkakafka-ui:image: provectuslabs/kafka-ui:latestcontainer_name: kafka-uiports:- '8080:8080'environment:- KAFKA_CLUSTERS_0_NAME=kraft-kafka- KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092- DYNAMIC_CONFIG_ENABLED=truevolumes:kafka_data:
🚀 啟動步驟
docker-compose up -d
? 服務啟動后地址
服務 | 地址 | 說明 |
---|---|---|
Kafka Broker | localhost:9092 | NestJS 直接連 |
Kafka UI | http://localhost:8080 | 查看 Topic、消息 |
🔥 注意事項(使用 Kraft)
說明 | 備注 |
---|---|
控制器 | Kafka 自己用 Raft 協議管理元數據,不再需要 ZooKeeper |
單節點開發環境 | OK,生產建議部署多節點控制器 |
鏡像推薦 | 使用 bitnami/kafka ,官方純凈版 Kraft 支持最好 |
? NestJS Kafka 連接不變
new Kafka({clientId: 'seckill-service',brokers: ['localhost:9092'],
});
🧠 額外補充
特性 | Zookeeper版 Kafka | Kraft版 Kafka |
---|---|---|
簡單性 | ? 復雜 | ? 簡潔 |
啟動速度 | 慢 | 快 |
部署節點數量 | 多 | 少 |
生產是否推薦使用 | 需要搭建多個 Broker | 需要搭建多個 Controller Broker |
? kafka/README.md
運維指令集和最佳實踐
📦 kafka/README.md 內容:
Kafka Kraft 模式部署指南
🐳 使用 Docker-Compose 快速啟動
cd kafka
docker-compose up -d
? 啟動以下容器:
- kafka (KRaft模式,無需Zookeeper)
- kafka-ui(管理界面)
🌐 服務地址
服務 | 地址 | 說明 |
---|---|---|
Kafka Broker | localhost:9092 | 供 NestJS 項目連接使用 |
Kafka UI | http://localhost:8080 | 可視化查看 Topic / 消費者組等信息 |
🛠? 常用運維指令
查看所有容器狀態
docker ps
查看 Kafka UI 日志
docker-compose logs kafka-ui
查看 Kafka Broker 日志
docker-compose logs kafka
創建 Topic(進入 Kafka 容器內部執行)
docker exec -it kafka bash# 創建 topic
kafka-topics.sh --bootstrap-server localhost:9092 --create --topic seckill-orders --partitions 3 --replication-factor 1
查看 Topic 列表
kafka-topics.sh --bootstrap-server localhost:9092 --list
查看 Topic 消息
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic seckill-orders --from-beginning
? NestJS 配置 Kafka
NestJS 項目中連接 Kafka:
new Kafka({clientId: 'seckill-service',brokers: ['localhost:9092'],
});
🚨 注意事項
- 這是開發測試環境配置(單節點 Kraft)
- 生產環境應至少部署 3 個 Broker 節點,啟用多控制器選舉
- 確認端口號未被占用(默認 9092 / 8080)