本文档介绍了如何监控 Managed Service for Apache Kafka 集群,以确保 Kafka 工作负载的可靠性。
概览
可靠性是指系统在一段时间内正确、持续运行的能力。对于基于 Kafka 的工作负载,可靠性不仅包括 Kafka 集群本身,还包括生成和使用消息的客户端应用。
Managed Service for Apache Kafka 旨在容忍并从许多常见故障中恢复。例如,该服务会将副本放置在不同的可用区中以实现容错,并自动重启发生故障的代理。不过,还有一些影响可靠性的因素不在服务的直接控制范围内,例如:
- 客户端配置
- 集群上的负载,包括平均负载和峰值
- 分区数和副本数
- 主题配置,例如消息保留
为了实现可靠的运营,请务必监控集群的这些运营参数,并将其保持在建议的范围内。以下各部分介绍了对可靠性至关重要的一些关键指标。
集群容量
为避免集群过载,请监控以下信号。创建提醒,以便在这些指标长时间超出建议范围时收到通知。
CPU 利用率。尽量将所有代理的 CPU 利用率保持在 80% 以下。
代理磁盘利用率:确保代理磁盘利用率保持在 80% 以下。
分区数。尽量使每个代理的分区数少于 4,000 个,每个集群的分区数少于 100,000 个。
如果集群容量不足,请考虑采取以下缓解措施:
增加集群的 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}] ) |
| broker 磁盘利用率 | 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),则存在严重的数据丢失和可用性风险。通常,这种情况是由一个或多个代理的容量不足或基础设施故障引起的。复制不足的分区。当同步副本的数量低于复制因子时,分区就会出现副本不足的情况。如果某个分区在数十分钟内一直处于复制不足的状态,则可能存在代理、存储容量或其他方面的问题。
在滚动重启期间,broker 会在重启时变得不可用,从而导致暂时性复制不足。这是正常情况,无需干预。
下表显示了可用于监控复制的 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}] ) ) |