第 19 章 通过添加或删除代理来扩展集群
通过添加代理来扩展 Kafka 集群,可以提高集群的性能和可靠性。添加更多代理会增加可用资源,允许集群处理更大的工作负载并处理更多信息。它还可以通过提供更多副本和备份来提高容错。相反,删除使用率不足的代理可减少资源消耗并提高效率。必须仔细执行扩展,以避免中断或数据丢失。通过在集群中的所有代理间重新分发分区,每个代理的资源使用率会减少,这可以提高集群的整体吞吐量。
要增加 Kafka 主题的吞吐量,您可以增加该主题的分区数量。这允许在集群中的不同代理之间共享主题的负载。但是,如果每个代理受特定资源(如 I/O)的限制,则添加更多分区不会增加吞吐量。在这种情况下,您需要在集群中添加更多代理。
调整 Kafka.spec.kafka.replicas
配置会影响作为副本的集群中代理数量。主题的实际复制因素由 default.replication.factor
和 min.insync.replicas
的设置决定,以及可用代理的数量。例如,一个复制因素为 3 表示主题的每个分区在三个代理之间复制,确保在代理失败时容错。
副本配置示例
当通过 Kafka
资源配置添加代理时,节点 ID 以 0 (零)开始,Cluster Operator 会为新节点分配下一个最低 ID。代理删除过程从集群中 ID 的最高代理 pod 开始。
如果您要使用节点池管理集群中的节点,请调整 KafkaNodePool.spec.replicas
配置以更改节点池中的节点数。另外,在使用节点池扩展现有集群时,您可以为 扩展操作分配节点 ID。
当您添加或删除代理时,Kafka 不会自动重新分配分区。执行此操作的最佳方法是使用 Cruise Control。在扩展集群或缩减时,您可以使用 Cruise Control 的 add-brokers
和 remove-brokers
模式。
-
在扩展 Kafka 集群后,使用
add-brokers
模式,将现有代理中的分区副本移到新添加的代理中。 -
在缩减 Kafka 集群前,使用
remove-brokers
模式,将分区副本移出要删除的代理。
19.1. 在缩减操作中跳过检查 复制链接链接已复制到粘贴板!
默认情况下,Apache Kafka 的 Streams 会执行检查,以确保在 Kafka 集群上启动缩减操作前,代理中没有分区副本。检查适用于仅执行代理角色或代理和控制器双角色的节点。
如果找到副本,则不会进行缩减,以防止潜在的数据丢失。要缩减集群,在尝试再次缩减前,代理不能保留任何副本。
然而,在有些情况下,您可能想要绕过此机制。例如,在忙碌的集群中禁用检查可能是必需的,例如,因为新主题为代理生成副本。这种情况可能会无限期地阻止缩减,即使代理几乎为空。以这种方式覆盖阻塞机制有影响:有关缩减代理的主题存在可能会导致 Kafka 集群协调失败。
您可以通过注解 Kafka 集群的 Kafka
资源来绕过阻塞机制。通过将 strimzi.io/skip-broker-scaledown-check
注解设置为 true
来注解资源:
添加注解以跳过缩减操作上的检查
oc annotate Kafka my-kafka-cluster strimzi.io/skip-broker-scaledown-check="true"
oc annotate Kafka my-kafka-cluster strimzi.io/skip-broker-scaledown-check="true"
此注解指示 Apache Kafka 的 Streams 跳过 scale-down 检查。将 my-kafka-cluster
替换为特定 Kafka
资源的名称。
要恢复缩减操作的检查,请删除注解:
删除注解以跳过缩减操作的检查
oc annotate Kafka my-kafka-cluster strimzi.io/skip-broker-scaledown-check-
oc annotate Kafka my-kafka-cluster strimzi.io/skip-broker-scaledown-check-