本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

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):
# 下载官方 docker-compose.yml curl -O [***] # 修改 KAFKA_ADVERTISED_HOST_NAME 为 Docker 主机 IP # 启动集群(后台运行) docker-compose up -d
# 扩展至 3 个 Broker 节点 docker-compose scale kafka=3
# 停止并保留容器(数据持久化) docker-compose stop # 停止并删除容器(数据不保留) docker-compose down
Broker ID 用于标识集群中的节点,支持两种配置方式:
手动指定:通过 KAFKA_BROKER_ID 环境变量直接设置(适用于固定节点数量场景)。
environment: KAFKA_BROKER_ID: 1 # 固定 Broker ID 为 1
自动生成:通过 BROKER_ID_COMMAND 执行命令生成(适用于动态扩缩容场景)。
environment: BROKER_ID_COMMAND: "hostname | awk -F'-' '{print $2}'" # 从容器 hostname 提取 ID
注意:自动生成 ID 时,建议使用
docker-compose up --no-recreate避免容器重建导致 ID 变化。
通过 KAFKA_CREATE_TOPICS 环境变量预定义主题,格式为:
"主题名:分区数:副本数[:清理策略]",多主题用逗号分隔(可通过 KAFKA_CREATE_TOPICS_SEPARATOR 自定义分隔符)。
示例:
environment: 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 元数据服务):
environment: HOSTNAME_COMMAND: "wget -t3 -T2 -qO- [***]" # 获取 AWS 实例私有 IP
广告端口(Advertised Port):
动态获取:通过 PORT_COMMAND 提取容器映射端口:
environment: 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 环境):
environment: 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 元数据服务):
environment: RACK_COMMAND: "curl [***]" # 获取可用区
通过 KAFKA_JMX_OPTS 和 JMX_PORT 启用 JMX 监控:
environment: 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:
version: '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 # 用于动态获取容器信息
启动集群:
docker-compose -f docker-compose-single-broker.yml up -d
创建 docker-compose.yml:
version: '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 节点集群:
docker-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 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429