第 5 章 在 KRaft 模式中使用 Kafka
KRaft (Kafka Raft metadata)模式取代了 Kafka 对 ZooKeeper 进行集群管理的依赖。KRaft 模式通过将集群的元数据管理和协调引入 Kafka 集群简化了 Kafka 集群的部署和管理。
KRaft 模式中的 Kafka 旨在提供增强的可靠性、可扩展性和吞吐量。元数据操作变得更高效,因为它们直接集成。通过不再需要维护 ZooKeeper 集群,操作和安全开销也会降低。
要以 KRaft 模式部署 Kafka 集群,您必须使用 Kafka 和 KafkaNodePool 自定义资源。使用 KRaft 模式的 Kafka 资源还必须具有注解 strimzi.io/kraft: enabled 和 strimzi.io/node-pools: enabled。如需了解更多详细信息和示例,请参阅 第 7.3.1 节 “以 KRaft 模式部署 Kafka 集群”。
通过使用 KafkaNodePool 资源进行节点池配置,节点会被分配代理、控制器或两者的角色:
- 控制器节点 在 control plane 中操作,使用基于 Raft 的共识协议管理集群元数据和集群状态。
- 代理 节点在数据平面中运行,以管理消息流,接收和存储数据在主题分区中。
- 双角色 节点承担控制器和代理职责。
控制器使用元数据日志,在每个节点上存储为单分区主题(__cluster_metadata),记录集群的状态。当发出更改集群配置的请求时,活跃(lead)控制器管理元数据日志的更新,以及后续控制器复制这些更新。元数据日志存储代理、副本、主题和分区的信息,包括同步副本和分区领导的状态。Kafka 使用此元数据协调更改并有效地管理集群。
代理节点充当观察器,以被动存储元数据日志,以保持与集群的状态保持同步。每个节点独立获取日志的更新。
Kafka 集群中使用的 KRaft 元数据版本必须由使用的 Kafka 版本支持。两个版本都通过 Kafka 资源配置来管理。如需更多信息,请参阅 第 9.2 节 “在 KRaft 模式中配置 Kafka”。
在以下示例中,Kafka 集群包含控制器和代理节点的仲裁,用于容错和高可用性。
图 5.1. 带有独立代理和控制器节点的集群示例
在典型的生产环境中,使用专用代理和控制器节点。但是,您可能希望在双角色配置中使用节点进行开发或测试。
您可以将角色与执行单个角色的节点组合使用。在以下示例中,三个节点执行双重角色,两个节点仅充当代理。
图 5.2. 带有双角色节点和专用代理节点的集群示例
5.1. KRaft 限制 复制链接链接已复制到粘贴板!
目前,Apache Kafka Streams 中的 KRaft 模式有以下主要限制:
- 不支持或缩减 KRaft 控制器节点。
如果使用 JBOD 存储,您可以更改存储元数据日志的卷。