13.2.22. rack 架构参考
用于: KafkaClusterSpec
、KafkaConnectS2ISpec
、KafkaConnectSpec
机架
选项配置机架感知。机 架 可以表示可用性区域、数据中心或数据中心内的实际机架。机架 通过 topologyKey
配置。topologyKey
在 OpenShift 节点上标识一个标签,其值中包含拓扑名称。此类标签的示例为 topology.kubernetes.io/zone
(或较旧版本的 failure-domain.beta.kubernetes.io/zone
),其中包含 OpenShift 节点运行的可用区的名称。您可以将 Kafka 集群配置为了解它运行的 机架,并启用其他功能,如将分区副本分散到不同的机架或使用来自最接近的副本的消息。
如需有关 OpenShift 节点标签的更多信息,请参阅 Well-Known Labels、Annotations 和 Taints。请咨询您的 OpenShift 管理员,了解代表节点要部署到的区域或机架的节点标签。
13.2.22.1. 在机架间分散分区副本
配置机架感知后,AMQ Streams 将为每个 Kafka 代理设置 broker.rack
配置。broker.rack
配置为每个代理分配一个机架 ID。当配置了 broker.rack
时,Kafka 代理会尽可能将分区副本分散到多个不同的机架中。当副本分散到多个机架时,多个副本同时失败的可能性会低于它们在同一机架中。分发副本可以提高弹性,这对于可用性和可靠性至关重要。要在 Kafka 中启用 rack 感知,请在 Kafka
自定义资源的 .spec.kafka
部分添加 rack
选项,如下例所示。
Kafka 的机架
配置示例
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-cluster spec: kafka: # ... rack: topologyKey: topology.kubernetes.io/zone # ...
在某些情况下,当 pod 被删除或重启时,在其中运行代理的机 架 可能会改变。因此,在不同机架中运行的副本可能会共享同一个机架。使用 Cruise Control 和 KafkaRebalance
资源及 RackAwareGoal
以确保副本在不同的机架之间分布。
当在 Kafka
自定义资源中启用机架意识时,AMQ Streams 将自动添加 OpenShift preferredDuringSchedulingIgnoredDuringExecution
affinity 规则,以在不同的机架之间分发 Kafka 代理。但是,首选 规则不能保证代理会被分散。根据确切的 OpenShift 和 Kafka 配置,您应该为 ZooKeeper 和 Kafka 添加额外的 关联性
规则或为 ZooKeeper 和 Kafka 配置 topologySpreadConstraints
,以确保节点被正确分发到尽量多的机架。如需更多信息,请参阅 第 2.7 节 “配置 pod 调度”。