Kafka KRaft 模式详解
什么是 KRaft 模式?
KRaft(Kafka Raft)模式是 Apache Kafka 的新架构,用 Kafka 自身的共识算法替代了 ZooKeeper 的依赖。
传统架构 vs KRaft 架构
传统架构(依赖 ZooKeeper)
Kafka Brokers (多个) ────> ZooKeeper 集群 (3-5节点)
│ │
消息存储 元数据管理
客户端通信 控制器选举
Topic/分区信息
KRaft 架构(无 ZooKeeper)
Kafka Brokers (多个) ────> Kafka Controllers (使用Raft共识)
│ │
消息存储 元数据管理
客户端通信 控制器选举
Topic/分区信息
KRaft 的核心概念
1. 节点角色
- Controller 节点:负责集群元数据管理,使用 Raft 共识算法
- Broker 节点:负责消息存储和客户端通信
- Combined 节点:同时担任 Controller 和 Broker 角色
2. Raft 共识算法
- 基于投票的领导者选举机制
- 保证元数据的一致性和高可用
- 需要奇数个 Controller 节点(1,3,5...)
KRaft 的优势
1. 简化架构
bash
# 之前需要部署
Kafka集群 + ZooKeeper集群
# 现在只需要
Kafka集群(KRaft模式)
2. 性能提升
- 元数据操作更快(减少网络跳转)
- 启动时间更短
- 支持更多分区(从 20万 → 到 200万+)
3. 运维简化
- 减少组件依赖
- 统一的监控和管理
- 更简单的安全配置
配置示例
单节点开发环境(你之前的配置)
bash
KAFKA_CFG_NODE_ID=0
KAFKA_CFG_PROCESS_ROLES=controller,broker
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
三节点生产环境
bash
# 节点1
KAFKA_CFG_NODE_ID=1
KAFKA_CFG_PROCESS_ROLES=controller,broker
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093
# 节点2
KAFKA_CFG_NODE_ID=2
KAFKA_CFG_PROCESS_ROLES=controller,broker
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093
# 节点3
KAFKA_CFG_NODE_ID=3
KAFKA_CFG_PROCESS_ROLES=controller,broker
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093
迁移考虑
何时使用 KRaft
- ✅ 新集群:强烈推荐使用 KRaft
- ✅ 开发测试环境:简化部署
- ⚠️ 现有集群:需要迁移过程
版本要求
- Kafka 3.3+:KRaft 生产就绪
- Kafka 3.0-3.2:KRaft 早期版本(不推荐生产)
总结
KRaft 模式是 Kafka 的重要演进,它:
- 消除了 ZooKeeper 依赖
- 提升了性能和可扩展性
- 简化了运维复杂度
- 是 Kafka 未来的发展方向
你的配置正是一个典型的单节点 KRaft 模式,非常适合开发和测试使用!