第 29 章 管理 Apache Kafka 的流
为 Apache Kafka 管理流需要执行各种任务来保持 Kafka 集群和相关资源平稳运行。使用 oc
命令检查资源的状态,为滚动更新配置维护窗口,并利用 Apache Kafka Drain Cleaner 和 Kafka Static Quota 插件等工具来有效地管理部署。
29.1. 滚动更新的维护时间窗
通过维护时间窗口,您可以调度 Kafka 和 ZooKeeper 集群的某些滚动更新,以便在方便的时间启动。
29.1.1. 维护时间窗概述
在大多数情况下,Cluster Operator 只更新您的 Kafka 或 ZooKeeper 集群,以响应对应的 Kafka
资源更改。这可让您规划何时对 Kafka
资源应用更改,以最大程度降低对 Kafka 客户端应用程序的影响。
但是,如果您的 Kafka 和 ZooKeeper 集群的一些更新可能会在没有与 Kafka
资源对应的更改的情况下发生。例如,如果它管理的 CA (证书颁发机构)证书接近到期,Cluster Operator 将需要执行滚动重启。
虽然 pod 的滚动重启应该不会影响服务的可用性 (假设正确的代理和主题配置),但它可能会影响 Kafka 客户端应用程序的性能。通过维护时间窗,您可以调度 Kafka 和 ZooKeeper 集群的此类滚动更新,以便在方便的时间启动。如果没有为集群配置维护时间窗,则此类滚动更新可能会在不方便的时间内发生,如高负载的可预测期间。
29.1.2. 维护时间窗定义
您可以通过在 Kafka.spec.maintenanceTimeWindows
属性中输入字符串数组来配置维护时间窗。每个字符串都是以 UTC (协调世界时间)的 cron 表达式,它用于实际目的与 Greenwich Mean Time 相同。
以下示例配置了一个维护时间窗,它在午夜开始,并在 01:59am (UTC)结束,在 Sundays, Mondays, Tuesdays, Wednesdays, 和 Thursdays:
# ... maintenanceTimeWindows: - "* * 0-1 ? * SUN,MON,TUE,WED,THU *" # ...
在实践中,维护窗口应当与 Kafka
资源的 Kafka.spec.clusterCa.renewalDays
和 Kafka.spec.clientsCa.renewalDays
属性一起设置,以确保在配置的维护时间窗口中完成必要的 CA 证书续订。
Apache Kafka 的流不会根据给定的窗口完全调度维护操作。相反,对于每个协调,它会检查维护窗口当前是否为 "open"。这意味着,在一个给定时间窗内开始维护操作会延迟到 Cluster Operator 协调间隔。因此,维护时间窗必须至少为长。
29.1.3. 配置维护时间窗
您可以为由支持的进程触发的滚动更新配置维护时间窗。
先决条件
- 一个 OpenShift 集群。
- Cluster Operator 正在运行。
流程
在
Kafka
资源中添加或编辑maintenanceTimeWindows
属性。例如,允许在 0800 和 1059 之间维护 1400 到 1559,您可以设置maintenanceTimeWindows
,如下所示:apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-cluster spec: kafka: # ... zookeeper: # ... maintenanceTimeWindows: - "* * 8-10 * * ?" - "* * 14-15 * * ?"
创建或更新资源:
oc apply -f <kafka_configuration_file>