Apache Kafka单节点KRaft模式Docker部署指南
2025-07-05 04:51:53作者:伍希望
概述
本文将详细介绍如何使用Docker Compose快速部署一个单节点Apache Kafka集群,采用KRaft模式(去ZooKeeper架构)。KRaft是Kafka社区开发的新共识协议,用于替代传统的ZooKeeper依赖,使Kafka成为一个完全自包含的系统。
环境准备
在开始之前,请确保您的系统已安装:
- Docker引擎(版本17.05或更高)
- Docker Compose(版本1.25.0或更高)
配置文件解析
基础配置
version: '2'
services:
broker:
image: ${IMAGE}
hostname: broker
container_name: broker
ports:
- '9092:9092'
version: '2'
:指定Docker Compose文件格式版本image: ${IMAGE}
:使用环境变量指定Kafka镜像,便于灵活切换版本hostname
和container_name
:设置容器主机名和名称ports
:将容器9092端口映射到主机9092端口,这是Kafka的默认客户端连接端口
KRaft模式关键配置
environment:
KAFKA_NODE_ID: 1
KAFKA_PROCESS_ROLES: 'broker,controller'
KAFKA_CONTROLLER_QUORUM_VOTERS: '1@broker:29093'
KAFKA_PROCESS_ROLES
:指定节点同时承担broker和controller角色KAFKA_CONTROLLER_QUORUM_VOTERS
:定义控制器仲裁投票者,单节点模式下只需配置自身
网络监听配置
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT'
KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT_HOST://localhost:9092,PLAINTEXT://broker:19092'
KAFKA_LISTENERS: 'CONTROLLER://:29093,PLAINTEXT_HOST://:9092,PLAINTEXT://:19092'
- 配置了三种监听器:
CONTROLLER
:用于控制器通信(端口29093)PLAINTEXT_HOST
:外部客户端连接(端口9092)PLAINTEXT
:内部broker间通信(端口19092)
存储与副本配置
KAFKA_LOG_DIRS: '/tmp/kraft-combined-logs'
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
KAFKA_LOG_DIRS
:指定Kafka数据存储目录- 副本因子设置为1,适合单节点开发环境
部署步骤
-
创建
.env
文件(与docker-compose.yml同目录):IMAGE=apache/kafka:3.7.0
-
启动服务:
docker-compose up -d
-
验证服务:
docker logs broker
看到"Started"日志表示启动成功
使用说明
-
生产消息:
docker exec -it broker kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
-
消费消息:
docker exec -it broker kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
注意事项
-
此配置仅适用于开发和测试环境,生产环境需要:
- 配置多节点集群
- 设置适当的副本因子
- 配置持久化存储
- 启用安全认证
-
数据存储在容器内的
/tmp
目录,容器重启后数据会丢失。如需持久化,应挂载主机目录。 -
KRaft模式是Kafka的未来方向,但某些高级功能可能仍在开发中。
通过这个简单的Docker Compose配置,您可以快速搭建一个Kafka开发环境,体验KRaft模式带来的简洁架构。