第 21 章 使用 Cruise Control 修改主题复制因素


通过更新 Topic Operator 管理的 KafkaTopic 资源来更改主题的复制因素。您可以针对特定目的调整复制因素,例如:

  • 为非关键主题或资源短缺设置较低的复制因素
  • 设置更高的复制因素以提高数据持久性和容错

主题 Operator 使用 Cruise Control 进行必要的更改,因此必须使用 Apache Kafka 的 Streams 部署 Cruise Control。

主题 Operator 会监视并定期协调所有受管和取消暂停的 KafkaTopic 资源,并通过比较 Kafka 中的主题的复制因素来检测对 .spec.replicas 配置的更改。然后,一个或多个复制因素更新会被发送到 Cruise Control,以便在单个请求中处理。

进度反映在 KafkaTopic 资源的状态中。

先决条件

流程

  1. 编辑 KafkaTopic 资源以更改 replicas 值。

    在此过程中,我们将 my-topicreplicas 值从 1 改为 3。

    Kafka 主题复制因素配置

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaTopic
    metadata:
      name: my-topic
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      partitions: 1
      replicas: 3
      # ...
    Copy to Clipboard Toggle word wrap

  2. 将更改应用到 KafkaTopic 配置,并等待 Topic Operator 更新主题。
  3. 检查 KafkaTopic 资源的状态,以确保请求成功:

    oc get kafkatopics my-topic -o yaml
    Copy to Clipboard Toggle word wrap

    复制因子更改的状态

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaTopic
    metadata:
      name: my-topic
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      partitions: 1
      replicas: 3
      # ...
    
    # ...
    status:
      conditions:
      - lastTransitionTime: "2024-01-18T16:13:50.490918232Z"
        status: "True"
        type: Ready
      observedGeneration: 2
      replicasChange:
        sessionId: 1aa418ca-53ed-4b93-b0a4-58413c4fc0cb 
    1
    
        state: ongoing 
    2
    
        targetReplicas: 3 
    3
    
      topicName: my-topic
    Copy to Clipboard Toggle word wrap

    1
    Cruise Control 操作的会话 ID,它会在进程移出待处理状态时显示。
    2
    更新的状态。从 pending 移到 ongoing,然后在更改完成后删除整个 replicasChange 状态。
    3
    请求的副本数量会改变。

    如果请求在完成前失败,状态中会显示错误消息。如果请求进入失败状态,则会定期重试。

使用独立主题 Operator 更改主题复制因素

如果您使用独立主题 Operator 的目的是通过配置更改主题复制因素,您仍然需要在单向模式中使用主题 Operator 和 Cruise Control 部署。您还需要在独立主题 Operator 部署中包括以下环境变量,以便它可以与 Cruise Control 集成。

独立主题 Operator 部署配置示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: strimzi-topic-operator
  labels:
    app: strimzi
spec:
  # ...
  template:
    # ...
    spec:
      # ...
      containers:
        - name: strimzi-topic-operator
          # ...
          env:
            # ...
            - name: STRIMZI_CRUISE_CONTROL_ENABLED 
1

              value: true
            - name: STRIMZI_CRUISE_CONTROL_RACK_ENABLED 
2

              value: false
            - name: STRIMZI_CRUISE_CONTROL_HOSTNAME 
3

              value: cruise-control-api.namespace.svc
            - name: STRIMZI_CRUISE_CONTROL_PORT 
4

              value: 9090
            - name: STRIMZI_CRUISE_CONTROL_SSL_ENABLED 
5

              value: true
            - name: STRIMZI_CRUISE_CONTROL_AUTH_ENABLED 
6

              value: true
Copy to Clipboard Toggle word wrap

1
将 Cruise Control 与 Topic Operator 集成。
2
指定是否在 Kafka 集群中启用机架感知的标记。如果是这样,副本可以分布到不同的机架、数据中心或可用性区域。
3
Cruise Control 主机名。
4
Cruise 控制端口。
5
启用 TLS 身份验证和加密以访问 Kafka 集群。
6
启用访问 Cruise Control API 的基本授权。

如果启用了 TLS 身份验证和授权,请按如下所示挂载所需的证书:

  • /etc/tls-sidecar/cluster-ca-certs/ca.crt中的集群 CA (证书颁发机构)的公共证书
  • /etc/eto-cc-api/topic-operator.apiAdminName/etc/eto-cc-api/topic-operator.apiAdminPassword中的基本授权凭证(用户名和密码)
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat