25.2. 使用来自最接近的副本的消息
机架感知也可用于消费者从最接近的副本获取数据。当 Kafka 集群跨越多个数据中心时,这可用于减少网络上的负载,并可在公有云中运行 Kafka 时降低成本。但是,可能会导致延迟增加。
为了能够从最接近的副本使用,必须在 Kafka 集群中配置机架感知,且必须启用 RackAwareReplicaSelector。replica selector 插件提供逻辑,使客户端能够从最接近的副本使用。默认实现使用 LeaderSelector 始终为客户端选择领导副本。为 replica.selector.class 指定 RackAwareReplicaSelector 来从默认的实现中切换。
带有启用副本感知选择器的 rack 配置示例
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
# ...
rack:
topologyKey: topology.kubernetes.io/zone
config:
# ...
replica.selector.class: org.apache.kafka.common.replica.RackAwareReplicaSelector
# ...
除了 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 配置示例
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
# ...
spec:
# ...
rack:
topologyKey: topology.kubernetes.io/zone
# ...
当使用 Apache Kafka 的 Streams 部署 MirrorMaker 2 时,您可以使用 KafkaMirrorMaker2 自定义资源中的 rack 部分自动配置 client.rack 选项。
MirrorMaker 2 的 rack 配置示例
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaMirrorMaker2
# ...
spec:
# ...
rack:
topologyKey: topology.kubernetes.io/zone
# ...
当使用 Streams for Apache Kafka 部署 Kafka Bridge 时,您可以使用 KafkaBridge 自定义资源中的 rack 部分自动配置 client.rack 选项。
Kafka Bridge 的 rack 配置示例
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaBridge
# ...
spec:
# ...
rack:
topologyKey: topology.kubernetes.io/zone
# ...