本文档介绍了如何监控 Managed Service for Apache Kafka 集群,以确保 Kafka 工作负载的可靠性。
概览
可靠性是指系统在一段时间内正确、持续地运行的能力。对于基于 Kafka 的工作负载,可靠性不仅包括 Kafka 集群本身,还包括生成和使用消息的客户端应用。
Managed Service for Apache Kafka 旨在容忍许多常见故障并从中恢复。例如,该服务会将副本放置在不同的可用区中以实现容错,并自动重启发生故障的代理。不过,影响可靠性的其他因素不在服务的直接控制范围内,例如:
- 客户端配置
- 集群上的负载,包括平均负载和峰值
- 分区数和副本数
- 主题配置,例如消息保留
为了实现可靠的运营,请务必监控集群的这些运营参数,并将其保持在建议的范围内。以下各部分介绍了对可靠性至关重要的一些关键指标。
监控集群容量
为避免集群过载,请监控以下信号。创建提醒,以便在这些指标长时间超出建议范围时收到通知。
CPU 利用率。尽量将所有代理的 CPU 利用率保持在 80% 以下。
代理磁盘利用率:确保代理磁盘利用率保持在 80% 以下。
磁盘大小。作为安全的起点,我们建议每个代理的每个分区至少有
2*(segment.bytes)。在实践中,实际的磁盘空间要求通常要低得多。默认情况下,段文件会在 7 天后关闭并移至远程存储。 在相应时间段内,大多数分区接收的数据量通常都少于
segment.bytes,这意味着大多数分区使用的磁盘空间都少于segment.bytes。在增加磁盘大小之前,请在集群上创建更多分区时监控磁盘利用率。分区数。尽量使每个代理的分区数少于 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}] ) ) |