本文档介绍了如何监控 Managed Service for Apache Kafka 集群,以确保 Kafka 工作负载的可靠性。
概览
可靠性是指系统在一段时间内正确且一致地执行操作的能力。对于基于 Kafka 的工作负载,可靠性包括 Kafka 集群本身以及生成和使用消息的客户端应用。
Managed Service for Apache Kafka 旨在容忍许多常见故障并从中恢复。例如,该服务会将副本放置在不同的可用区中以实现容错,并自动重启发生故障的代理。 但是,影响可靠性的其他因素不在该服务的直接控制范围内,例如:
- 客户端配置
- 集群上的负载,包括平均负载和峰值
- 分区和副本的数量
- 主题配置,例如 消息保留
为了实现可靠的操作,请务必监控集群的这些运行参数,并将其保持在建议的范围内。以下部分介绍了一些对可靠性至关重要的关键指标。
集群容量
为避免集群过载,请监控以下信号。创建 提醒,以便在这些信号长时间超出 建议范围时通知您。
CPU 利用率 。尽量将所有代理的 CPU 利用率保持在 80% 以下。
代理磁盘利用率:确保代理磁盘利用率保持在 80% 以下。
分区数 。尽量将每个代理的分区数保持在 4000 个以下,并将每个集群的分区数保持在 10 万个以下。
如果集群容量不足,请考虑以下缓解措施:
增加集群的 vCPU 数量。如需了解详情,请参阅 更新 Kafka 集群。
扩容集群以添加更多代理。如需了解该 服务如何预配代理,请参阅 代理预配。
下表显示了这些指标的 Prometheus 查询语言 (PromQL) 查询 ,您可以将其添加到自定义 Cloud Monitoring 信息中心。
| 信号 | PromQL 查询 |
|---|---|
| CPU 利用率 | rate( { "managedkafka.googleapis.com/cpu/core_usage_time", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) / min_over_time( { "managedkafka.googleapis.com/cpu/limit", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) |
| 代理磁盘利用率 | max_over_time( { "managedkafka.googleapis.com/disk/used_bytes", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) / min_over_time( { "managedkafka.googleapis.com/disk/limit", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) |
| 每个分区的段大小 | # Assumes that segment files are 225 MiB. Check your cluster configuration. 2*225*(1024*1024) * max_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) / min_over_time( { "managedkafka.googleapis.com/disk/limit", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) |
| 每个代理的分区数 | max by (resource_container, location, cluster_id, broker_index) ( max_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
| 每个集群的分区数 | max by (resource_container, location, cluster_id) ( max_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
分区不平衡
负载不均可能会导致 Kafka 集群无法正常处理客户端请求。 分配给单个代理的分区数应保持在每个代理的平均分区数的 10% 左右。查找此指标中的离群值。
如需保持分区平衡,请考虑在集群扩容时启用 自动重新平衡 。
下表显示了可用于监控分区不平衡的 PromQL 查询。
| 信号 | PromQL 查询 |
|---|---|
| 每个代理的分区数 | sum by (resource_container, location, cluster_id, broker_index) ( avg_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
| 分区不平衡 | sum by (resource_container, location, cluster_id, broker_index) ( avg_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) / on (resource_container, location, cluster_id) group_left avg by (resource_container, location, cluster_id) ( avg_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) - 1 |
分区复制
数据复制对于确保工作负载具有容错能力至关重要。 在运行正常的集群中,主题中的每个分区都具有完整数量的 副本,具体取决于主题的配置 复制因子。
使用以下信号监控分区复制:
同步副本 (ISR) 数低于下限 。如果某个分区的同步 ISR 数少于配置的下限 (
min.insync.replicas), 则存在严重的数据丢失和可用性风险。通常,这种情况是由一个或多个代理的容量不足或基础架构故障造成的。复制的分区不足 。当同步副本数低于复制因子时,分区复制不足。如果某个分区在 10 分钟内仍复制不足,则可能是代理、存储容量或其他方面存在问题。
在滚动重启期间,代理会在重启时变得不可用,从而导致暂时复制不足。这种情况是正常的,无需干预。
下表显示了可用于监控复制的 PromQL 查询。
| 信号 | PromQL 查询 |
|---|---|
| ISR 数低于下限 | max by ( resource_container, location, cluster_id ) ( max_over_time( { "managedkafka.googleapis.com/broker/under_min_isr_partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
| 复制不足 | max by ( resource_container, location, cluster_id ) ( min_over_time( { "managedkafka.googleapis.com/broker/under_replicated_partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[10m:${__interval}] ) ) |