乐途乐途
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
  • 学习路径
  • 第1章 消息队列与 Kafka 概述

    • 章节导读
    • 消息队列基础
    • Kafka 概述
    • Kafka 为什么快
  • 第2章 快速上手:单机环境搭建

    • 章节导读
    • 环境准备与安装
    • 快速启动
    • Topic 管理
  • 第3章 核心概念:主题、分区与日志

    • 章节导读
    • Topic
    • Partition
    • Offset
    • Segment 与存储结构
  • 第4章 生产者详解

    • 章节导读
    • Producer 概述
    • Producer 发送机制
    • Producer 分区策略
    • Producer 幂等与事务
    • Producer 配置
  • 第5章 消费者与消费组

    • 章节导读
    • Consumer 概述
    • Consumer Group 消费组
    • Consumer 分区分配策略
    • Consumer Offset 提交
    • Consumer 多线程
    • Consumer 配置
  • 第6章 Broker 与控制器

    • 章节导读
    • Broker 概述
    • Broker 配置
    • Controller
    • KRaft 共识协议
  • 第7章 副本与数据可靠性

    • 章节导读
    • 副本机制
    • ISR 与副本同步
    • Leader 选举
    • ACK 与一致性保证
    • 高水位与 Leader Epoch
  • 第8章 存储与性能优化

    • 章节导读
    • 存储架构
    • 日志清理与压缩
    • Page Cache 与零拷贝
    • Producer 性能优化
    • Consumer 性能优化
    • Broker 性能优化
  • 第9章 生产环境运维与监控

    • 章节导读
    • Topic 管理
    • Kafka 运维工具
    • 监控
    • 常见故障排查
  • 第10章 Kafka生态与面试考点

    • 章节导读
    • Kafka 生态全景
    • 面试高频 30 题

KRaft 共识协议

定义与作用

KRaft(Kafka Raft)是 Kafka 3.x 引入的新一代元数据管理协议,用 Raft 共识算法 替代对 ZooKeeper 的依赖。它让 Kafka 集群自己管理自己的元数据(Topic 列表、分区分配、ISR 状态、配置信息等),而不再需要单独部署 ZooKeeper 集群。

KRaft 之于 Kafka 集群,如同 etcd 之于 Kubernetes:内嵌的分布式共识层。

核心原理

KRaft 架构

Raft 共识过程

Raft 概念Kafka KRaft 对应
LeaderActive Controller
Follower其他 Controller 节点
LogMetadata Topic (__cluster_metadata)
Quorumcontroller.quorum.voters 中配置的节点
多数派(voters/2) + 1

节点角色

完整示例

示例一:配置 3 节点 KRaft Quorum

场景:生产环境 3 节点 Controller Quorum,5 节点 Broker 集群。

Controller 节点配置(节点 1-3,仅 Controller):

# controller1.properties
node.id=1
process.roles=controller                     # 仅 Controller
controller.quorum.voters=1@controller1:9093,2@controller2:9093,3@controller3:9093
controller.listener.names=CONTROLLER
listeners=CONTROLLER://:9093

Broker 节点配置(节点 4-8,仅 Broker):

# broker4.properties
node.id=4
process.roles=broker                         # 仅 Broker
controller.quorum.voters=1@controller1:9093,2@controller2:9093,3@controller3:9093
controller.listener.names=CONTROLLER
listeners=PLAINTEXT://:9092

操作后验证:

# 查看 Quorum 状态
bin/kafka-metadata-quorum.sh --bootstrap-server broker4:9092 describe --status
# NodeId  LeaderId  LeaderEpoch  Status
# 1       1         5            Leader
# 2       1         5            Follower
# 3       1         5            Follower
# 4       -         -            Observer  ← Broker,不参与投票
# 5       -         -            Observer

示例二:KRaft 模式下的灾难恢复

场景:3 个 Controller 节点中 2 个同时故障,集群进入只读状态,需恢复。

# 1. 查看状态(2 节点故障,Leader 不可用)
bin/kafka-metadata-quorum.sh --bootstrap-server controller3:9093 describe --status
# NodeId  LeaderId  LeaderEpoch  Status
# 1       -1        -            (不可达)
# 2       -1        -            (不可达)
# 3       -1        -            Follower (无法成为 Leader—无多数派)

# 2. 恢复至少一个节点,使多数派可用
# 重启 Controller 1
bin/kafka-server-start.sh -daemon config/kraft/controller1.properties

# 3. 验证
bin/kafka-metadata-quorum.sh --bootstrap-server controller1:9093 describe --status
# NodeId  LeaderId  LeaderEpoch  Status
# 1       1         6            Leader  ← 恢复
# 2       -1        -            (不可达)
# 3       1         6            Follower

易错场景

易错 1:controller.quorum.voters 配置不一致

现象:各节点的 controller.quorum.voters 中节点列表不匹配。

后果:节点无法加入 Quorum,或形成脑裂。

规则:所有参与 Quorum 的节点(Controller 和 Broker)的 controller.quorum.voters 必须完全一致。

易错 2:Quorum 节点数设为偶数

场景:生产环境部署 2 个或 4 个 Controller 节点。

后果:

  • 2 个节点:任意 1 个故障 → 损失多数派(需要 2/2),集群不可用
  • 4 个节点:需要 3 个存活,容忍度与 3 节点相同,但多消耗资源

规则:Quorum 节点数始终设为奇数(3、5、7),容忍 (n-1)/2 个节点故障。

面试高频考点

Q:KRaft 和 ZooKeeper 模式的核心区别是什么?

A:

维度ZooKeeper 模式KRaft 模式
外部依赖需要独立 ZK 集群无外部依赖
元数据存储ZK 内存 + 磁盘Metadata Topic 磁盘
一致性协议ZAB(ZK 专有)Raft(标准化)
分区数上限~数万(受 ZK 限制)百万级
Controller 切换依赖 ZK 临时节点,较慢Raft 选举,更快(1-3s)
运维复杂度两套系统(Kafka + ZK)一套系统
生产就绪成熟(2011 至今)Kafka 3.5+ 生产可用
上一页
Controller