2.5. resources


配置 资源请求和限值 ,以控制 Apache Kafka 容器流的资源。您可以为 内存和 cpu 资源指定请求和限值。请求应该足以确保 Kafka 的稳定性能。

如何在生产环境中配置资源取决于多个因素。例如,应用可能会共享 OpenShift 集群中的资源。

对于 Kafka,部署的以下方面可能会影响您需要的资源:

  • 信息吞吐量和大小
  • 处理消息的网络线程数量
  • 生成者和消费者的数量
  • 主题和分区数量

为资源请求指定的值保留,并始终可供容器使用。资源限值指定给定容器可消耗的最大资源。请求和限制之间的数量不会被保留,且可能并不总是可用。容器只能在资源可用时最多使用限制。资源限值是临时的,可以重新分配。

资源请求和限值

Boundaries of a resource requests and limits

如果您在设置限制时没有设置请求,或反之,OpenShift 会将相同的值用于限制和请求。为资源设置相等的请求和限值保证服务质量,因为 OpenShift 不会终止容器,除非超过其限值。

使用以下自定义资源的 spec 中的 resources 属性为组件配置资源请求和限值:

KafkaNodePool 自定义资源用于以下组件:

  • 基于 KRaft 的 Kafka 节点(spec.resources)
  • 使用节点池(spec.resources)的基于 ZooKeeper 的 Kafka 节点

Kafka 自定义资源用于以下组件:

  • 基于 ZooKeeper 的集群,没有节点池的 Kafka (spec.kafka.resources)
  • ZooKeeper (spec.zookeeper.resources)
  • Topic Operator (spec.entityOperator.topicOperator.resources)
  • User Operator (spec.entityOperator.userOperator.resources)
  • Cruise Control (spec.cruiseControl.resources)
  • Kafka Exporter (spec.kafkaExporter.resources)

对于其他组件,资源在对应的自定义资源中配置。例如:

  • Kafka Connect 的 KafkaConnect 资源(spec.resources)
  • MirrorMaker 的 KafkaMirrorMaker2 资源(spec.resources)
  • Kafka Bridge 的 KafkaBridge 资源(spec.resources)

节点池的资源配置示例

Copy to Clipboard Toggle word wrap
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
  name: pool-a
  labels:
    strimzi.io/cluster: my-cluster
spec:
  replicas: 3
  roles:
    - broker
  resources:
      requests:
        memory: 64Gi
        cpu: "8"
      limits:
        memory: 64Gi
        cpu: "12"
  # ...

Topic Operator 的资源配置示例

Copy to Clipboard Toggle word wrap
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  # ..
  entityOperator:
    #...
    topicOperator:
      #...
      resources:
        requests:
          memory: 512Mi
          cpu: "1"
        limits:
          memory: 512Mi
          cpu: "1"

如果资源请求超过 OpenShift 集群中的可用可用资源,则不会调度该容器集。

注意

Apache Kafka 的流使用 OpenShift 语法来指定 内存和 cpu 资源。有关在 OpenShift 中管理计算资源的更多信息,请参阅管理容器的计算资源

内存资源

在配置内存资源时,请考虑组件的总要求。

Kafka 在 JVM 中运行,并使用操作系统页面缓存在写入磁盘前存储消息数据。Kafka 的内存请求应该适合 JVM 堆和页面缓存。您可以配置 jvmOptions 属性 来控制最小和最大堆大小。

其他组件不依赖于页面缓存。您可以在不配置 jvmOptions 的情况下,控制堆大小的情况下配置内存资源。

内存请求和限值以兆字节、GB、兆字节和千兆字节指定。在规格中使用以下后缀:

  • M 表示 MB
  • G 表示 GB
  • Mi 代表 mebibytes
  • Gi 代表 gibibytes

使用不同内存单元的资源示例

Copy to Clipboard Toggle word wrap
# ...
resources:
  requests:
    memory: 512Mi
  limits:
    memory: 2Gi
# ...

有关内存规格和其他支持的单元的详情,请参阅收集 内存

CPU 资源

CPU 请求应该足以随时提供可靠的性能。CPU 请求和限制以 coresmillicpus/millicores 的形式指定。

CPU 内核指定为整数(5 个 CPU 内核)或十进制(2.5 个 CPU 内核)。1000 millicore1 个 CPU 内核相同。

CPU 单元示例

Copy to Clipboard Toggle word wrap
# ...
resources:
  requests:
    cpu: 500m
  limits:
    cpu: 2.5
# ...

1 个 CPU 内核的计算能力可能会因部署 OpenShift 的平台而异。

有关 CPU 规格的更多信息,请参阅 CPU 机制

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat, Inc.