Kafka 单节点部署(Docker Compose + 数据持久化)

一、环境准备

1️⃣ 拉取镜像

bash 复制代码
docker pull apache/kafka:3.8.1

2️⃣ 创建数据目录

bash 复制代码
mkdir -p /opt/services-data/kafka/{data,logs}
cd /opt/services-data/kafka

3️⃣ 设置权限(⚠️必须)

bash 复制代码
chown -R 1000:1000 /opt/services-data/kafka
chmod -R 755 /opt/services-data/kafka

👉 原因:Kafka 容器默认使用 UID 1000(appuser)

二、生成 Cluster ID(KRaft 必须)

bash 复制代码
docker run --rm apache/kafka:3.8.1 \
  /opt/kafka/bin/kafka-storage.sh random-uuid

👉 示例输出:

text 复制代码
06M1KKGfRuyK7XWurAYXkA

👉 记下来,后面要用

三、编写 docker-compose.yml

yaml 复制代码
version: '3.8'
services:
  kafka:
    image: apache/kafka:3.8.1
    container_name: kafka
    restart: always
    ports:
      - "9092:9092"
      - "9093:9093"
    environment:
      KAFKA_NODE_ID: 1
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.122:9092
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@192.168.0.122:9093
      KAFKA_LOG_DIRS: /var/lib/kafka/data
      CLUSTER_ID: 06M1KKGfRuyK7XWurAYXkA
      # 单节点必须设置
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
    volumes:
      - ./data:/var/lib/kafka/data
      - ./logs:/opt/kafka/logs

⚠️ 必改项

yaml 复制代码
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.122:9092

👉 改成你服务器 IP

四、启动 Kafka

bash 复制代码
docker-compose up -d

查看日志

bash 复制代码
docker logs -f kafka

成功标志

text 复制代码
Kafka Server started

五、功能验证

1️⃣ 进入容器

bash 复制代码
docker exec -it kafka bash
cd /opt/kafka/bin

2️⃣ 创建 Topic

bash 复制代码
./kafka-topics.sh \
  --create \
  --topic test \
  --bootstrap-server 192.168.0.122:9092 \
  --partitions 1 \
  --replication-factor 1

3️⃣ 启动生产者

bash 复制代码
./kafka-console-producer.sh \
  --topic test \
  --bootstrap-server 192.168.0.122:9092

输入:

text 复制代码
hello
kafka

4️⃣ 启动消费者

bash 复制代码
./kafka-console-consumer.sh \
  --topic test \
  --bootstrap-server 192.168.0.122:9092 \
  --from-beginning

👉 正常输出:

text 复制代码
hello
kafka

六、总结

text 复制代码
✔ 使用 KRaft 模式,无需 Zookeeper
✔ Docker Compose 部署简单
✔ 数据目录持久化
✔ 支持外部访问
相关推荐
杨浦老苏13 小时前
把项目管理搬回自己服务器:Windshift部署与避坑
docker·项目管理·群晖
木雷坞13 小时前
Baserow Docker部署:导入设备借用CSV,再用表单新增登记
运维·docker·容器
wefg114 小时前
【Docker】基本指令
运维·docker·容器
骑着蜗牛撵大象32715 小时前
558 万美元训出 671B 模型:DeepSeek-V3 算法与系统的协同拆解
分布式·算法·moe·deepseek-v3·mla·fp8训练
牛马工作号16 小时前
Copyparty 轻量文件共享:Docker Compose 部署、权限与多协议使用全指南
运维·docker·容器
德迅云安全-上官16 小时前
德迅游戏盾:面向 TCP 业务的分布式云安全防护方案
分布式·tcp/ip·游戏
oioihoii17 小时前
Windows部署MySpeed自建测速服务:Docker运行后直接测速,再配置固定公网地址远程查看
运维·docker·容器
麻瓜code18 小时前
分布式锁演进:从一个用户下两单,到 Redisson,我改了四版
分布式·wpf
starzy199019 小时前
Kafka网络层第一道门:Acceptor线程是怎么启动的
大数据·kafka
skywalk816319 小时前
hive —— 多机 AI Agent 协同的任务总线:分布式,多节点同时运行,保障不会宕机
人工智能·hive·分布式