wurstmeister/kafka 是一个基于 Apache Kafka 的 Docker 镜像,提供了 Docker 化的 Kafka 部署方案。该镜像支持多 Broker 集群部署,可灵活配置 Broker 参数、网络监听规则和主题管理,适用于开发、测试及生产环境中快速搭建和扩展 Kafka 集群。镜像已发布至 Docker Hub,支持自动创建主题、动态扩展 Broker 节点及集成 ZooKeeper 等核心功能。
docker-compose scale 快速扩展集群节点数量。KAFKA_MESSAGE_MAX_BYTES)。LOG4J_ 前缀环境变量自定义日志配置。kafka-topics.sh 命令。docker-compose.yml 中的 KAFKA_ADVERTISED_HOST_NAME 为 Docker 主机 IP(不可使用 localhost/127.0.0.1,否则多 Broker 集群无法通信)。KAFKA_MESSAGE_MAX_BYTES: 2000000)。使用默认配置启动单节点集群(含 ZooKeeper):
bash# 下载*** docker-compose.yml curl -O [***] # 修改 KAFKA_ADVERTISED_HOST_NAME 为 Docker 主机 IP # 启动集群(后台运行) docker-compose up -d
bash# 扩展至 3 个 Broker 节点 docker-compose scale kafka=3
bash# 停止并保留容器(数据持久化) docker-compose stop # 停止并删除容器(数据不保留) docker-compose down
Broker ID 用于标识集群中的节点,支持两种配置方式:
手动指定:通过 KAFKA_BROKER_ID 环境变量直接设置(适用于固定节点数量场景)。
yamlenvironment: KAFKA_BROKER_ID: 1 # 固定 Broker ID 为 1
自动生成:通过 BROKER_ID_COMMAND 执行命令生成(适用于动态扩缩容场景)。
yamlenvironment: BROKER_ID_COMMAND: "hostname | awk -F'-' '{print $2}'" # 从容器 hostname 提取 ID
注意:自动生成 ID 时,建议使用
docker-compose up --no-recreate避免容器重建导致 ID 变化。
通过 KAFKA_CREATE_TOPICS 环境变量预定义主题,格式为:
"主题名:分区数:副本数[:清理策略]",多主题用逗号分隔(可通过 KAFKA_CREATE_TOPICS_SEPARATOR 自定义分隔符)。
示例:
yamlenvironment: KAFKA_CREATE_TOPICS: "Topic1:3:2,Topic2:1:1:compact" # Topic1:3分区2副本;Topic2:1分区1副本,清理策略为 compact KAFKA_CREATE_TOPICS_SEPARATOR: "$$'\n'" # 可选,使用换行符分隔主题(需符合 Docker Compose 转义规则)
容器环境中需将 Broker 地址暴露给外部客户端,支持动态获取主机名或端口:
广告主机名(Advertised Hostname):
手动指定:KAFKA_ADVERTISED_HOST_NAME: 192.168.1.100
自动获取:通过 HOSTNAME_COMMAND 执行命令(如 AWS 元数据服务):
yamlenvironment: HOSTNAME_COMMAND: "wget -t3 -T2 -qO- [***]" # 获取 AWS 实例私有 IP
广告端口(Advertised Port):
动态获取:通过 PORT_COMMAND 提取容器映射端口:
yamlenvironment: PORT_COMMAND: "docker port $$(hostname) 9092/tcp | cut -d: -f2" # 获取 9092 端口的宿主机映射端口 KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://192.168.1.100:_{PORT_COMMAND}" # 引用 PORT_COMMAND 结果
Kafka 0.9+ 支持多监听器配置,用于区分内外网流量或不同协议(如 PLAINTEXT/SSL)。需配置以下参数:
| 参数 | 说明 | 示例 |
|---|---|---|
KAFKA_LISTENERS | 监听地址列表(格式:协议://地址:端口) | INSIDE://:9092,OUTSIDE://:9094 |
KAFKA_ADVERTISED_LISTENERS | 客户端可见的监听地址列表 | INSIDE://:9092,OUTSIDE://{IP}:9094 |
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP | 协议与安全策略映射 | INSIDE:PLAINTEXT,OUTSIDE:SSL |
KAFKA_INTER_BROKER_LISTENER_NAME | Broker 间通信使用的协议名 | INSIDE |
示例配置(AWS 环境):
yamlenvironment: HOSTNAME_COMMAND: "curl [***]" # 获取公网主机名 KAFKA_LISTENERS: "INSIDE://:9092,OUTSIDE://:9094" KAFKA_ADVERTISED_LISTENERS: "INSIDE://:9092,OUTSIDE://_{HOSTNAME_COMMAND}:9094" # 引用 HOSTNAME_COMMAND 结果 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" KAFKA_INTER_BROKER_LISTENER_NAME: "INSIDE" # Broker 间通过 INSIDE 协议通信
规则:
advertised.listeners 中的协议和端口必须在 listeners 中存在。配置 Broker 机架信息(如 AWS 可用区),优化副本分布:
手动指定:KAFKA_BROKER_RACK: "us-west-2a"
自动获取:通过 RACK_COMMAND 执行命令(如 AWS 元数据服务):
yamlenvironment: RACK_COMMAND: "curl [***]" # 获取可用区
通过 KAFKA_JMX_OPTS 和 JMX_PORT 启用 JMX 监控:
yamlenvironment: KAFKA_JMX_OPTS: "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.rmi.port=1099" JMX_PORT: 1099 # JMX 监听端口 ports: - "1099:1099" # 映射 JMX 端口到宿主机
连接示例:jconsole 127.0.0.1:1099
创建 docker-compose-single-broker.yml:
yamlversion: '2' services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" kafka: image: wurstmeister/kafka ports: - "9092:9092" environment: KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 # 必填:ZooKeeper 连接地址 KAFKA_ADVERTISED_HOST_NAME: 192.168.1.100 # 替换为 Docker 主机 IP KAFKA_BROKER_ID: 0 # 固定 Broker ID KAFKA_CREATE_TOPICS: "test-topic:3:1" # 创建 test-topic(3分区1副本) volumes: - /var/run/docker.sock:/var/run/docker.sock # 用于动态获取容器信息
启动集群:
bashdocker-compose -f docker-compose-single-broker.yml up -d
创建 docker-compose.yml:
yamlversion: '2' services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" kafka: image: wurstmeister/kafka ports: - "9092" # 动态分配宿主机端口 environment: KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_HOST_NAME: 192.168.1.100 BROKER_ID_COMMAND: "hostname | awk -F'-' '{print $2}'" # 自动生成 Broker ID volumes: - /var/run/docker.sock:/var/run/docker.sock
启动 3 节点集群:
bashdocker-compose up -d docker-compose scale kafka=3 # 扩展至 3 个 Broker
| 环境变量 | 必填 | 说明 | 示例值 |
|---|---|---|---|
KAFKA_ZOOKEEPER_CONNECT | 是 | ZooKeeper 连接字符串(格式:host:port[,host:port]) | zookeeper:2181 |
KAFKA_BROKER_ID | 否 | 手动指定 Broker ID | 1 |
BROKER_ID_COMMAND | 否 | 生成 Broker ID 的命令(与 KAFKA_BROKER_ID 二选一) | `"hostname |
KAFKA_CREATE_TOPICS | 否 | 自动创建的主题列表(格式:主题:分区:副本[:清理策略]) | "Topic1:3:2,Topic2:1:1:compact" |
KAFKA_CREATE_TOPICS_SEPARATOR | 否 | 主题分隔符(默认 ,) | "$$'\n'"(换行符) |
KAFKA_ADVERTISED_HOST_NAME | 否 | 手动指定广告主机名(与 HOSTNAME_COMMAND 二选一) | 192.168.1.100 |
HOSTNAME_COMMAND | 否 | 生成广告主机名的命令 | "curl [***]" |
PORT_COMMAND | 否 | 生成广告端口的命令 | `"docker port $$(hostname) 9092/tcp |
KAFKA_LISTENERS | 否 | 监听器列表(格式:协议://地址:端口) | "INSIDE://:9092,OUTSIDE://:9094" |
KAFKA_ADVERTISED_LISTENERS | 否 | 广告监听器列表 | "INSIDE://:9092,OUTSIDE://{IP}:9094" |
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP | 否 | 协议-安全策略映射 | "INSIDE:PLAINTEXT,OUTSIDE:SSL" |
KAFKA_INTER_BROKER_LISTENER_NAME | 否 | Broker 间通信协议名 | "INSIDE" |
KAFKA_BROKER_RACK | 否 | 手动指定 Broker 机架信息 | "us-west-2a" |
RACK_COMMAND | 否 | 生成机架信息的命令 | "curl [***]" |
KAFKA_JMX_OPTS | 否 | JMX 配置参数 | "-Dcom.sun.management.jmxremote ..." |
JMX_PORT | 否 | JMX 监听端口 | 1099 |
KAFKA_BROKER_ID 或使用 --no-recreate 避免容器重建。KAFKA_LISTENERS 时,请勿同时设置 KAFKA_ADVERTISED_HOST_NAME 和 KAFKA_ADVERTISED_PORT,避免配置冲突。KAFKA_ZOOKEEPER_CONNECT 指向可用的 ZooKeeper 集群。来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429