2.5. resources
配置 资源请求和限值 ,以控制 Apache Kafka 容器流的资源。您可以为 内存和
cpu
资源指定请求和限值。请求应该足以确保 Kafka 的稳定性能。
如何在生产环境中配置资源取决于多个因素。例如,应用可能会共享 OpenShift 集群中的资源。
对于 Kafka,部署的以下方面可能会影响您需要的资源:
- 信息吞吐量和大小
- 处理消息的网络线程数量
- 生成者和消费者的数量
- 主题和分区数量
为资源请求指定的值保留,并始终可供容器使用。资源限值指定给定容器可消耗的最大资源。请求和限制之间的数量不会被保留,且可能并不总是可用。容器只能在资源可用时最多使用限制。资源限值是临时的,可以重新分配。
资源请求和限值
如果您在设置限制时没有设置请求,或反之,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
)
节点池的资源配置示例
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" # ...
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 的资源配置示例
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"
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 Copied! Toggle word wrap Toggle overflow ... ...
# ... resources: requests: memory: 512Mi limits: memory: 2Gi # ...
有关内存规格和其他支持的单元的详情,请参阅收集 内存。
-
- CPU 资源
CPU 请求应该足以随时提供可靠的性能。CPU 请求和限制以 cores 或 millicpus/millicores 的形式指定。
CPU 内核指定为整数(
5
个 CPU 内核)或十进制(2.5
个 CPU 内核)。1000 millicore 与1
个 CPU 内核相同。CPU 单元示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ... ...
# ... resources: requests: cpu: 500m limits: cpu: 2.5 # ...
1 个 CPU 内核的计算能力可能会因部署 OpenShift 的平台而异。
有关 CPU 规格的更多信息,请参阅 CPU 机制。