目 录CONTENT

文章目录

在docker环境快速搭建kafka开发环境

Administrator
2025-11-21 / 0 评论 / 0 点赞 / 5 阅读 / 0 字

# 在docker环境快速搭建kafka开发环境

## 快速搭建基于 KRaft 模式(无 ZooKeeper) 的 Kafka 开发环境

### 单节点部署 Kafka

1. 主要适用于开发测试、原型验证或低负载简单场景

2. 一键启动Kafka 服务,无需配置多节点集群的网络、副本同步等复杂逻辑,大幅降低环境搭建时间。

3. 本地机器、小型虚拟机或低配服务器的资源(CPU、内存、磁盘)有限,单节点部署可避免多节点对资源的抢占,减少环境卡顿或启动失败的问题。

### 生产环境绝对禁止单节点部署

它无法提供高可用(节点故障即服务中断)、无法通过副本保证数据可靠性,也无法支撑高吞吐量业务

## 单节点kafka部署拓扑图

![](https://funkygod.uk/1763718292227-24101c8f-6617-45a5-97ba-dd3fd6fbd33e.png)

## 部署配置

```yaml

---

# This docker compose file is used for developer to setup

# dev enironment quickly. Only local machine with

# docker and docker-compose is required.

version: '3.3' # Docker Compose文件格式版本,指定兼容的Compose版本

services:

kafka:

# 使用Bitnami的Kafka镜像(基于Debian 12,Kafka 3.9.0版本),Bitnami镜像配置友好,适合开发环境

image: docker.1ms.run/bitnamilegacy/kafka:3.9.0-debian-12-r3

ports:

# 端口映射:宿主机端口 -> 容器内端口,对应不同监听器

- "9092:9092" # PLAINTEXT监听器(容器内broker间通信/内部访问)

- "9093:9093" # CONTROLLER监听器(KRaft控制器通信)

- "9094:9094" # EXTERNAL监听器(宿主机外部PLAINTEXT访问)

- "9095:9095" # EXTERNAL_SASL监听器(SASL认证访问)

volumes:

# 数据持久化:将容器内Bitnami Kafka的数据目录映射到宿主机./kafka_data,防止容器删除后数据丢失

- "./kafka_data:/bitnami"

environment:

# -------------------------- KRaft模式配置(无ZooKeeper) --------------------------

- KAFKA_CFG_NODE_ID=0 # KRaft节点ID,单节点集群设为0

- KAFKA_CFG_PROCESS_ROLES=controller,broker # 节点角色:同时作为控制器和Broker(单节点部署)

- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093 # 控制器投票节点列表(格式:节点ID@地址:端口)

# -------------------------- Broker基础配置 --------------------------

- KAFKA_CFG_BROKER_ID=0 # Broker的唯一标识ID

# -------------------------- SASL认证配置 --------------------------

- KAFKA_CLIENT_USERS=user # 客户端SASL认证的用户名

- KAFKA_CLIENT_PASSWORDS=password # 客户端SASL认证的密码

- KAFKA_CLIENT_LISTENER_NAME=EXTERNAL_SASL # 启用SASL认证的监听器名称

- KAFKA_CONTROLLER_USER=controller_user # 控制器间通信的认证用户名

- KAFKA_CONTROLLER_PASSWORD=controller_password # 控制器间通信的认证密码

# -------------------------- 监听器配置(核心) --------------------------

# 定义所有监听器:协议://绑定地址:端口

- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://:9094,EXTERNAL_SASL://:9095

# 对外公告的监听器地址(客户端实际连接的地址)

- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://host.docker.internal:9094,EXTERNAL_SASL://kafka:9095

# 监听器与安全协议的映射关系

- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT,EXTERNAL_SASL:SASL_PLAINTEXT

- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER # 控制器使用的监听器名称

- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT # Broker间通信使用的监听器名称

# -------------------------- 消息保留策略配置 --------------------------

- KAFKA_CFG_LOG_RETENTION_HOURS=168 # 消息日志保留时间(7天=24*7)

- KAFKA_CFG_LOG_RETENTION_BYTES=1073741824 # 单个分区日志总大小上限(1GB)

- KAFKA_CFG_LOG_SEGMENT_BYTES=134217728 # 单个日志段文件大小(128MB),达到后滚动生成新文件

- KAFKA_CFG_LOG_RETENTION_CHECK_INTERVAL_MS=300000 # 日志清理检查间隔(5分钟=5*60*1000)

hostname: kafka.local # 容器的主机名,方便容器内/网络内解析

```

![](https://funkygod.uk/1763716956755-4246824d-8e32-4706-aa49-5e1274cd9481.png)

### 协议说明

| 协议类型 | 认证机制 | 传输加密 | 特点 |

| ------------------ | -------------- | -------------- | ------------------------------------------------------------------------------ |

| PLAINTEXT | 无认证(匿名) | 无加密(明文) | 最简单的模式,数据裸传输,仅适合开发 / 测试环境,**生产环境禁止使用** 。 |

| SASL_PLAINTEXT | SASL 认证 | 无加密(明文) | 有身份认证(如用户名密码),但传输内容不加密,适合内网可信环境。 |

| SASL_SSL | SASL 认证 | SSL/TLS 加密 | 既有身份认证,又有传输加密,生产环境推荐。 |

| SSL | SSL 证书认证 | SSL/TLS 加密 | 基于证书的双向认证 + 传输加密,安全性高但配置复杂。 |

```

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区