25.2. 使用来自最接近的副本的消息
机架感知也可用于消费者从最接近的副本获取数据。当 Kafka 集群跨越多个数据中心时,这可用于减少网络上的负载,并可在公有云中运行 Kafka 时降低成本。但是,可能会导致延迟增加。
为了能够从最接近的副本使用,必须在 Kafka 集群中配置机架感知,且必须启用 RackAwareReplicaSelector。replica selector 插件提供逻辑,使客户端能够从最接近的副本使用。默认实现使用 LeaderSelector 始终为客户端选择领导副本。为 replica.selector.class 指定 RackAwareReplicaSelector 来从默认的实现中切换。
带有启用副本感知选择器的 rack 配置示例
除了 Kafka 代理配置外,您还需要在消费者中指定 client.rack 选项。client.rack 选项应该指定运行使用者的 机架 ID。RackAwareReplicaSelector 关联匹配的 broker.rack 和 client.rack ID,以查找最接近的副本并从其使用。如果同一机架中有多个副本,RackAwareReplicaSelector 始终选择最新的副本。如果没有指定机架 ID,或者找不到具有相同机架 ID 的副本,它将回退到领导副本。
图 25.1. 在同一可用区中显示来自副本的客户端示例
您还可以配置 Kafka Connect、MirrorMaker 2 和 Kafka Bridge,以便连接器使用最接近的副本的消息。您可以在 KafkaConnect、KafkaMirrorMaker2 和 KafkaBridge 自定义资源中启用机架感知。配置不会设置关联性规则,但您也可以配置 affinity 或 topologySpreadConstraints。如需更多信息,请参阅配置 pod 调度。
当使用 Streams for Apache Kafka 部署 Kafka Connect 时,您可以使用 KafkaConnect 自定义资源中的 rack 部分自动配置 client.rack 选项。
Kafka Connect 的 rack 配置示例
当使用 Apache Kafka 的 Streams 部署 MirrorMaker 2 时,您可以使用 KafkaMirrorMaker2 自定义资源中的 rack 部分自动配置 client.rack 选项。
MirrorMaker 2 的 rack 配置示例
当使用 Streams for Apache Kafka 部署 Kafka Bridge 时,您可以使用 KafkaBridge 自定义资源中的 rack 部分自动配置 client.rack 选项。
Kafka Bridge 的 rack 配置示例