Kafka 3.9.1的KRaft模式部署

一、核心架构与角色
  1. KRaft 模式特点
    • 去中心化:移除 ZooKeeper,元数据由 Kafka 集群内部管理。
    • Raft 协议:通过 Raft 实现元数据一致性,控制器(Controller)节点组成仲裁(Quorum)处理元数据变更。
    • 角色分离:Broker 负责消息存储,Controller 负责元数据管理,两者可独立部署或合并运行(Combined 模式)。
  2. 节点类型
    • Broker:存储消息数据,处理生产/消费请求。
    • Controller:管理元数据(如 Topic、分区、副本状态),参与 Raft 选举。
    • Combined 模式:单节点同时运行 Broker 和 Controller(适用于开发环境,生产环境不推荐)。
二、关键配置参数

以下配置需在 server.properties 文件中设置:

参数说明示例值
process.roles节点角色,可选 brokercontroller 或两者组合(如 broker,controller)。broker,controller(生产环境推荐分离部署)
node.id节点唯一标识,需在集群内唯一。1(Controller 节点)、2(Broker 节点)
controller.quorum.votersController 仲裁列表,格式为 {id}@{host}:{port}1@controller1:9093,2@controller2:9093,3@controller3:9093
listeners监听地址,需包含 PLAINTEXT(Broker)和 CONTROLLER(内部通信)。PLAINTEXT://:9092,CONTROLLER://:9093
advertised.listeners对外暴露的 Broker 地址(客户端连接地址)。PLAINTEXT://192.168.1.100:9092
controller.listener.namesController 监听器名称(固定为 CONTROLLER)。CONTROLLER
log.dirs数据存储目录(建议独立磁盘)。/data/kafka/logs
inter.broker.listener.nameBroker 间通信使用的监听器名称(需与 listeners 一致)。PLAINTEXT

单机本地KRaft模式完整示例

broker.id=0
listeners=PLAINTEXT://localhost:9092,CONTROLLER://0.0.0.0:9093
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT

process.roles=broker,controller
controller.quorum.voters=0@localhost:9093
# controller.quorum.voting.mode=round-robin
controller.listener.names=CONTROLLER


advertised.listeners=PLAINTEXT://localhost:9092
三、配置步骤
  1. 生成集群 ID
    使用 kafka-storage.sh 工具生成唯一集群 ID:

    bin/kafka-storage.sh random-uuid

    输出示例:4hU1sxPUQG-4qqqgZQxFZA(需记录并用于后续格式化)。

  2. 格式化存储目录
    在所有节点上执行格式化,指定集群 ID 和配置文件:

    bin/kafka-storage.sh format -t <CLUSTER_ID> -c config/kraft/server.properties
  3. 启动服务

    • 单节点(Combined 模式)
      bin/kafka-server-start.sh config/kraft/server.properties
    • 多节点集群
      按角色分别启动 Controller 和 Broker 服务(建议使用 systemd 管理进程)。
  4. 验证集群状态

    • 检查 Broker 列表:
      bin/kafka-broker-api-versions.sh --bootstrap-server <BROKER_IP>:9092

    • 查看 Controller 状态:
      bin/kafka-metadata-quorum.sh describe --bootstrap-server <BROKER_IP>:9092
四、生产环境最佳实践
  1. Controller 节点配置
    • 数量:建议 3 或 5 个节点(奇数),容忍 (n-1)/2 个节点故障。
    • 资源隔离:与 Broker 分离部署,避免资源竞争。
    • 网络优化:使用低延迟、高带宽网络(如万兆网卡)。
  2. Broker 节点配置
    • 副本数default.replication.factor=3(兼顾可用性与存储成本)。
    • 消息压缩:启用 compression.type=lz4 或 zstd 减少网络开销。
    • JVM 调优:设置 KAFKA_HEAP_OPTS="-Xmx8G -Xms8G",启用 G1 垃圾回收器。
  3. 监控与运维
    • 关键指标:Controller 选举耗时、元数据复制延迟、Broker 磁盘 I/O。
    • 日志管理:定期清理旧日志(log.retention.hours=168)。
五、常见问题解决
  1. No security protocol defined for listener CONTROLLER
    • 原因:未配置 CONTROLLER 监听器的安全协议。
    • 解决:在 server.properties 中添加:
      listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
  2. 客户端连接失败
    • 检查项
      • advertised.listeners 是否为客户端可访问的 IP 或域名。
      • 防火墙是否开放 9092(Broker)和 9093(Controller)端口。
  3. 元数据不一致
    • 场景:Controller 选举失败或网络分区。
    • 处理:检查 kafka-metadata-quorum.sh 输出,确认 Leader 和 Voters 状态。
### 安装配置 Apache Kafka KRaft 模式的指南 #### 准备工作 为了确保顺利安装和配置Kafka KRaft模式,需先确认环境满足最低要求。建议的操作系统版本为Linux或MacOS,并已安装Java Development Kit (JDK),因为Kafka依赖于Java运行时环境[^2]。 #### 下载并解压软件包 访问Apache官方网站下载最新稳定版的Kafka压缩文件。完成下载后,在目标目录下执行如下命令来解压该文件: ```bash tar -xzf kafka_2.13-3.0.0.tgz cd kafka_2.13-3.0.0 ``` 此操作会创建一个包含所有必要组件的新文件夹。 #### 修改配置文件 进入`config/`子目录编辑名为`server.properties`的主要设置文档。对于启用KRaft协议而言,最重要的更改之一是在这个文件里指定控制器监听器名称以及定义节点ID: ```properties process.roles=broker,controller node.id=<unique_node_id> listeners=PLAINTEXT://:9092 inter.broker.listener.name=PLAINTEXT controller.quorum.voters=<comma_separated_list_of_controller_nodes> listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT num.partitions=1 default.replication.factor=1 min.insync.replicas=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 log.retention.hours=168 zookeeper.connect=localhost:2181 # Remove this line when using KRaft mode. delete.topic.enable=true ``` 请注意移除任何涉及ZooKeeper连接字符串(`zookeeper.connect`)的相关条目,因为在KRaft模式下不再需要ZooKeeper服务。 #### 初始化元数据日志 在首次启动之前,必须初始化内部使用的控制平面日志结构。这一步骤通过调用特定脚本来完成: ```bash bin/kafka-storage.sh format -t <cluster_uuid> -c config/kraft/server.properties ``` 这里`<cluster_uuid>`应该替换为唯一标识符,可以通过随机生成获得;而路径参数则指向刚才修改过的服务器属性文件位置。 #### 启动集群成员 现在可以依次开启各个Broker实例了。假设已经按照上述指导调整好了三个不同机器上的相应设定,则可以在每台主机上分别运行下面这条指令: ```bash bin/kafka-server-start.sh config/kraft/server.properties & ``` 一旦看到类似“Kafka Server started”的提示信息显示出来即表示单个节点成功加入到整个集群当中去了[^1]。 #### 测试连通性和功能验证 最后一步是对新搭建起来的服务做基本的功能测试。比如发送几条消息给主题topic再读取它们回来查看是否正常运作无误。如果一切顺利的话就说明Kafka KRaft集群已经被正确设置了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值