Apache Kafka是一个开源事件流平台,用于实时大规模收集、处理、存储和集成数据。它支持多种使用场景,包括流处理、数据集成和发布/订阅消息传递。Kafka最初由LinkedIn开发,2011年开源,2012年成为Apache软件基金会项目,目前被全球数千家组织用于支持关键任务实时应用。
本Docker镜像运行基于GraalVM的原生Kafka broker。通过GraalVM的原生镜像编译技术,将默认以KRaft组合模式(同时作为broker和KRaft控制器)运行的broker编译为原生二进制可执行文件,提供轻量级的Kafka运行环境。
与基于JVM的https://hub.docker.com/r/apache/kafka%E7%9B%B8%E6%AF%94%EF%BC%8C%E6%9C%AC%E9%95%9C%E5%83%8F%E5%85%B7%E6%9C%89%E4%BB%A5%E4%B8%8B%E6%A0%B8%E5%BF%83%E4%BC%98%E5%8A%BF%EF%BC%9A
基于上述优势,本镜像特别适用于以下场景:
有关此镜像引入Apache Kafka项目的更多信息,请参考KIP-974。
启动Kafka broker,将Kafka监听端口映射到主机相同端口:
consoledocker run -d -p 9092:9092 --name broker apache/kafka-native:latest
下载Apache Kafka以获取命令行工具(kafka-topics.sh、kafka-console-producer.sh等工具未包含在kafka-native镜像中)。解压最新Kafka发行版后,进入bin目录:
consolecd <KAFKA_HOME>/bin/
创建主题:主题是Kafka中事件的逻辑分组。创建名为test-topic的主题:
console./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test-topic
生产消息:使用Kafka控制台生产者向test-topic写入两条字符串事件:
console./kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test-topic
命令执行后将显示>提示符,输入hello并按Enter,再输入world并按Enter,然后按Ctrl+C退出生产者。
消费消息:从日志开头读取test-topic中的事件:
console./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic --from-beginning
将看到之前生产的两条消息:
hello world
消费者将持续运行,按Ctrl+C退出。
停止容器:完成后,停止并删除容器:
consoledocker rm -f broker
Apache Kafka支持通过环境变量覆盖broker配置。环境变量需以KAFKA_为前缀,配置项中的点(.)需替换为下划线(_)。例如,配置num.partitions(默认分区数)对应环境变量KAFKA_NUM_PARTITIONS。
注意:覆盖任何配置时,默认配置将不再生效。例如,如需以KRaft组合模式(broker和控制器在同一容器中运行)运行并将默认分区数从1改为3,需指定
KAFKA_NUM_PARTITIONS及其他必要配置:
consoledocker run -d \ -p 9092:9092 \ --name broker \ -e KAFKA_NODE_ID=1 \ -e KAFKA_PROCESS_ROLES=broker,controller \ -e KAFKA_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \ -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \ -e KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER \ -e KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \ -e KAFKA_CONTROLLER_QUORUM_VOTERS=1@localhost:9093 \ -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \ -e KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1 \ -e KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1 \ -e KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS=0 \ -e KAFKA_NUM_PARTITIONS=3 \ apache/kafka-native:latest
使用Docker Compose管理配置
命令行指定大量环境变量较为繁琐,建议使用Docker Compose管理Kafka容器。验证Docker Compose是否安装:
consoledocker compose version
如需安装,参考Docker Compose安装文档。
示例:通过Docker Compose运行Kafka并将默认分区数改为3。创建docker-compose.yml文件:
yamlservices: broker: image: apache/kafka-native:latest container_name: broker ports: - 9092:9092 environment: KAFKA_NODE_ID: 1 KAFKA_PROCESS_ROLES: broker,controller KAFKA_LISTENERS: PLAINTEXT://localhost:9092,CONTROLLER://localhost:9093 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092 KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT KAFKA_CONTROLLER_QUORUM_VOTERS: 1@localhost:9093 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 KAFKA_NUM_PARTITIONS: 3
在docker-compose.yml所在目录启动容器:
consoledocker compose up -d
可使用快速启动中的步骤测试主题创建、消息生产和消费。停止容器:
consoledocker compose down
本部分介绍更贴近真实场景的Kafka部署:3个broker和3个控制器(KRaft隔离模式),支持从Docker网络内部和主机访问。
部署要点
KAFKA_PROCESS_ROLES根据容器角色设为broker或controller(非组合模式的broker,controller)KAFKA_CONTROLLER_QUORUM_VOTERS包含所有控制器节点(格式:节点ID@控制器容器名:端口)KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR(3)、KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR(3)和KAFKA_TRANSACTION_STATE_LOG_MIN_ISR(2)broker-1映射29092,broker-2映射39092等)Docker Compose配置
创建docker-compose.yml文件:
yamlservices: controller-1: image: apache/kafka-native:latest container_name: controller-1 environment: KAFKA_NODE_ID: 1 KAFKA_PROCESS_ROLES: controller KAFKA_LISTENERS: CONTROLLER://:9093 KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_CONTROLLER_QUORUM_VOTERS: 1@controller-1:9093,2@controller-2:9093,3@controller-3:9093 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 controller-2: image: apache/kafka-native:latest container_name: controller-2 environment: KAFKA_NODE_ID: 2 KAFKA_PROCESS_ROLES: controller KAFKA_LISTENERS: CONTROLLER://:9093 KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_CONTROLLER_QUORUM_VOTERS: 1@controller-1:9093,2@controller-2:9093,3@controller-3:9093 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 controller-3: image: apache/kafka-native:latest container_name: controller-3 environment: KAFKA_NODE_ID: 3 KAFKA_PROCESS_ROLES: controller KAFKA_LISTENERS: CONTROLLER://:9093 KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_CONTROLLER_QUORUM_VOTERS: 1@controller-1:9093,2@controller-2:9093,3@controller-3:9093 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 broker-1: image: apache/kafka-native:latest container_name: broker-1 ports: - 29092:9092 environment: KAFKA_NODE_ID: 4 KAFKA_PROCESS_ROLES: broker KAFKA_LISTENERS: 'PLAINTEXT://:19092,PLAINTEXT_HOST://:9092' KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://broker-1:19092,PLAINTEXT_HOST://localhost:29092' KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_CONTROLLER_QUORUM_VOTERS: 1@controller-1:9093,2@controller-2:9093,3@controller-3:9093 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 depends_on: - controller-1 - controller-2 - controller-3 broker-2: image: apache/kafka-native:latest container_name: broker-2 ports: - 39092:9092 environment: KAFKA_NODE_ID: 5 KAFKA_PROCESS_ROLES: broker KAFKA_LISTENERS: 'PLAINTEXT://:19092,PLAINTEXT_HOST://:9092' KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://broker-2:19092,PLAINTEXT_HOST://localhost:39092' KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_CONTROLLER_QUORUM_VOTERS: 1@controller-1:9093,2@controller-2:9093,3@controller-3:9093 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 depends_on: - controller-1 - controller-2 - controller-3 broker-3: image: apache/kafka-native:latest container_name: broker-3 ports: - 49092:9092 environment: KAFKA_NODE_ID: 6 KAFKA_PROCESS_ROLES: broker KAFKA_LISTENERS: 'PLAINTEXT://:19092,PLAINTEXT_HOST://:9092' KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://broker-3:19092,PLAINTEXT_HOST://localhost:49092' KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_CONTROLLER_QUORUM_VOTERS: 1@controller-1:9093,2@controller-2:9093,3@controller-3:9093 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 depends_on: - controller-1 - controller-2 - controller-3
启动和使用多节点集群
在docker-compose.yml所在目录启动容器:
consoledocker compose up -d
使用以下命令创建主题、生产和消费消息(指定所有broker的主机监听器):
console# 创建主题 ./kafka-topics.sh --bootstrap-server localhost:29092,localhost:39092,localhost:49092 --create --topic test-topic # 生产消息 ./kafka-console-producer.sh --bootstrap-server localhost:29092,localhost:39092,localhost:49092 --topic test-topic # 消费消息 ./kafka-console-consumer.sh --bootstrap-server localhost:29092,localhost:39092,localhost:49092 --topic test-topic --from-beginning
停止集群:
consoledocker compose down
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务