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