首页
/ Apache Kafka单节点KRaft模式Docker部署指南

Apache Kafka单节点KRaft模式Docker部署指南

2025-07-05 04:51:53作者:伍希望

概述

本文将详细介绍如何使用Docker Compose快速部署一个单节点Apache Kafka集群,采用KRaft模式(去ZooKeeper架构)。KRaft是Kafka社区开发的新共识协议,用于替代传统的ZooKeeper依赖,使Kafka成为一个完全自包含的系统。

环境准备

在开始之前,请确保您的系统已安装:

  1. Docker引擎(版本17.05或更高)
  2. 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镜像,便于灵活切换版本
  • hostnamecontainer_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,适合单节点开发环境

部署步骤

  1. 创建.env文件(与docker-compose.yml同目录):

    IMAGE=apache/kafka:3.7.0
    
  2. 启动服务:

    docker-compose up -d
    
  3. 验证服务:

    docker logs broker
    

    看到"Started"日志表示启动成功

使用说明

  1. 生产消息:

    docker exec -it broker kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
    
  2. 消费消息:

    docker exec -it broker kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
    

注意事项

  1. 此配置仅适用于开发和测试环境,生产环境需要:

    • 配置多节点集群
    • 设置适当的副本因子
    • 配置持久化存储
    • 启用安全认证
  2. 数据存储在容器内的/tmp目录,容器重启后数据会丢失。如需持久化,应挂载主机目录。

  3. KRaft模式是Kafka的未来方向,但某些高级功能可能仍在开发中。

通过这个简单的Docker Compose配置,您可以快速搭建一个Kafka开发环境,体验KRaft模式带来的简洁架构。