9.3. 使用 ZooKeeper 配置 Kafka


更新 Kafka 自定义资源的 spec 属性,以使用 ZooKeeper 配置 Kafka 部署。

除了配置 Kafka 外,您可以为 ZooKeeper 和 Apache Kafka operator 的 Streams 添加配置。Kafka 和 Apache Kafka operator 的配置选项与在 KRaft 模式下使用 Kafka 时相同。有关属性的描述,请参阅 第 9.2 节 “在 KRaft 模式中配置 Kafka”

inter-broker 协议版本(inter.broker.protocol.version)必须是 Kafka 版本(spec.kafka.version)支持的版本。如果配置中没有设置 inter-broker 协议版本,Cluster Operator 会将版本更新为使用的 Kafka 版本的默认设置。

如果您也使用节点池,必须在 节点池 配置中指定以下内容:

  • 分配给 Kafka 集群中每个节点的角色
  • 使用的副本节点数量
  • 节点的存储规格

如果在节点池配置中设置,则不需要 Kafka 资源中的等效配置,如 spec.kafka.replicas。其他可选属性也可以在节点池中设置。

要深入了解 ZooKeeper 集群配置选项,请参阅 Apache Kafka 自定义资源 API 参考流

使用 ZooKeeper 时的 Kafka 自定义资源配置示例

# Basic configuration (required)
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
# Deployment specifications
spec:
  kafka:
    # Replicas (required)
    replicas: 3
    # Kafka version (recommended)
    version: 3.8.0
    # Logging configuration (optional)
    logging:
      type: inline
      loggers:
        kafka.root.logger.level: INFO
    # Resources requests and limits (recommended)
    resources:
      requests:
        memory: 64Gi
        cpu: "8"
      limits:
        memory: 64Gi
        cpu: "12"
    # Readiness probe (optional)
    readinessProbe:
      initialDelaySeconds: 15
      timeoutSeconds: 5
    # Liveness probe (optional)
    livenessProbe:
      initialDelaySeconds: 15
      timeoutSeconds: 5
    # JVM options (optional)
    jvmOptions:
      -Xms: 8192m
      -Xmx: 8192m
    # Custom image (optional)
    image: my-org/my-image:latest
    # Listener configuration (required)
    listeners:
      - name: plain
        port: 9092
        type: internal
        tls: false
        configuration:
          useServiceDnsDomain: true
      - name: tls
        port: 9093
        type: internal
        tls: true
        authentication:
          type: tls
      - name: external1
        port: 9094
        type: route
        tls: true
        configuration:
          brokerCertChainAndKey:
            secretName: my-secret
            certificate: my-certificate.crt
            key: my-key.key
    # Authorization (optional)
    authorization:
      type: simple
    # Kafka configuration (recommended)
    config:
      auto.create.topics.enable: "false"
      offsets.topic.replication.factor: 3
      transaction.state.log.replication.factor: 3
      transaction.state.log.min.isr: 2
      default.replication.factor: 3
      min.insync.replicas: 2
      inter.broker.protocol.version: "3.8"
    # Storage configuration (required)
    storage:
      type: persistent-claim
      size: 10000Gi
    # Rack awareness (optional)
    rack:
      topologyKey: topology.kubernetes.io/zone
    # Metrics configuration (optional)
    metricsConfig:
      type: jmxPrometheusExporter
      valueFrom:
        configMapKeyRef:
          name: my-config-map
          key: my-key
    # ...
  # ZooKeeper configuration (required)
  zookeeper: 
1

    # Replicas (required)
    replicas: 3 
2

    # Logging configuration (optional)
    logging: 
3

      type: inline
      loggers:
        zookeeper.root.logger: INFO
    # Resources requests and limits (recommended)
    resources: 
4

      requests:
        memory: 8Gi
        cpu: "2"
      limits:
        memory: 8Gi
        cpu: "2"
    # JVM options (optional)
    jvmOptions: 
5

      -Xms: 4096m
      -Xmx: 4096m
    # Storage configuration (required)
    storage: 
6

      type: persistent-claim
      size: 1000Gi
    # Metrics configuration (optional)
    metricsConfig: 
7

      type: jmxPrometheusExporter
      valueFrom:
        configMapKeyRef: 
8

          name: my-config-map
          key: my-key
    # ...
  # Entity operator (recommended)
  entityOperator:
    topicOperator:
      watchedNamespace: my-topic-namespace
      reconciliationIntervalSeconds: 60
      # Logging configuration (optional)
      logging:
        type: inline
        loggers:
          rootLogger.level: INFO
      # Resources requests and limits (recommended)
      resources:
        requests:
          memory: 512Mi
          cpu: "1"
        limits:
          memory: 512Mi
          cpu: "1"
    userOperator:
      watchedNamespace: my-topic-namespace
      reconciliationIntervalSeconds: 60
      # Logging configuration (optional)
      logging:
        type: inline
        loggers:
          rootLogger.level: INFO
      # Resources requests and limits (recommended)
      resources:
        requests:
          memory: 512Mi
          cpu: "1"
        limits:
          memory: 512Mi
          cpu: "1"
  # Kafka Exporter (optional)
  kafkaExporter:
    # ...
  # Cruise Control (optional)
  cruiseControl:
    # ...
Copy to Clipboard Toggle word wrap

1
特定于 ZooKeeper 的配置包含与 Kafka 配置类似的属性。
2
ZooKeeper 节点数量。ZooKeeper 集群通常有奇数个节点,一般为三个、五个或七个。大多数节点都必须可用,才能保持有效的仲裁。如果 ZooKeeper 集群丢失了其仲裁,它将停止响应客户端,并且 Kafka 代理将停止工作。拥有稳定且高度可用的 ZooKeeper 集群对于 Apache Kafka 来说至关重要。
3
ZooKeeper 日志记录器和日志级别。
4
为保留支持的资源(当前 cpumemory )的请求,以及指定可消耗的最大资源的限制。
5
JVM 配置选项,用于优化运行 ZooKeeper 的虚拟机(VM)的性能。
6
持久性卷的存储大小可能会增加,并可以添加额外的卷到 JBOD 存储中。
7
启用 Prometheus 指标。在本例中,为 Prometheus JMX Exporter (默认指标导出器)配置了指标。
8
通过 Prometheus JMX Exporter 将指标数据导出到 Grafana 仪表板的规则,通过引用包含 Prometheus JMX exporter 配置的 ConfigMap 来启用。您可以使用对 metricsConfig.valueFrom.configMapKeyRef.key 下包含空文件的 ConfigMap 的引用来启用指标。

9.3.1. 默认 ZooKeeper 配置值

当使用 Apache Kafka 的 Streams 部署 ZooKeeper 时,Apache Kafka 的 Streams 设置的一些默认配置与标准 ZooKeeper 默认值不同。这是因为 Apache Kafka 的 Streams 设置多个 ZooKeeper 属性,其值在 OpenShift 环境中运行 ZooKeeper。

Apache Kafka Streams 中密钥 ZooKeeper 属性的默认配置如下:

Expand
表 9.1. Apache Kafka 的 Streams 中的默认 ZooKeeper 属性
属性默认值Description

tickTime

2000

以毫秒为单位的单空长度,它决定了会话超时的长度。

initLimit

5

在 ZooKeeper 集群中允许后续者获得的最大 tick 数量。

syncLimit

2

后续允许不与 ZooKeeper 集群中的领导不同步的最大 tick 数量。

autopurge.purgeInterval

1

启用 autopurge 功能,并在小时内设置清除服务器端 ZooKeeper 事务日志的时间间隔。

admin.enableServer

false

禁用 ZooKeeper admin 服务器的标记。在 Apache Kafka 中,流不使用 admin 服务器。

重要

修改这些默认值作为 Kafka 自定义资源中的 zookeeper.config 可能会影响 ZooKeeper 集群的行为和性能。

9.3.2. 使用注解删除 ZooKeeper 节点

此流程描述了如何使用 OpenShift 注解删除现有 ZooKeeper 节点。删除 ZooKeeper 节点包括删除运行 ZooKeeper 的 Pod 和相关的 PersistentVolumeClaim (如果集群使用持久性存储部署)。删除后,Pod 及其相关的 PersistentVolumeClaim 会自动重新创建。

警告

删除 PersistentVolumeClaim 可能会导致持久性数据丢失,且不能保证集群可用。只有在遇到存储问题时才应执行以下步骤。

先决条件

  • 正在运行的 Cluster Operator

流程

  1. 查找您要删除的 Pod 的名称。

    ZooKeeper pod 名为 <cluster_name>-zookeeper-<index_number>,其中<index_number> 从 0 开始,以总副本数减一结束。例如,my-cluster-zookeeper-0

  2. 使用 oc annotate 注解 OpenShift 中的 Pod 资源:

    oc annotate pod <cluster_name>-zookeeper-<index_number> strimzi.io/delete-pod-and-pvc="true"
    Copy to Clipboard Toggle word wrap
  3. 等待下一个协调,当注解的 pod 带有底层持久性卷声明的 pod 将被删除,然后重新创建。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat