In diesem Dokument wird beschrieben, wie Sie einen Managed Service for Apache Kafka-Cluster überwachen, um die Zuverlässigkeit Ihrer Kafka-Arbeitslasten zu gewährleisten.
Übersicht
Zuverlässigkeit ist die Fähigkeit eines Systems, über einen längeren Zeitraum hinweg korrekt und konsistent zu funktionieren. Bei Kafka-basierten Arbeitslasten umfasst die Zuverlässigkeit sowohl die Kafka-Cluster selbst als auch die Clientanwendungen, die Nachrichten erstellen und verarbeiten.
Managed Service for Apache Kafka ist so konzipiert, dass er viele gängige Fehler toleriert und sich davon erholt. Der Dienst platziert beispielsweise Replikate in verschiedenen Zonen, um Fehlertoleranz zu gewährleisten, und startet ausgefallene Broker automatisch neu. Andere Faktoren, die sich auf die Zuverlässigkeit auswirken, liegen jedoch außerhalb der direkten Kontrolle des Dienstes, z. B.:
- Clientkonfiguration
- Last auf dem Cluster, einschließlich durchschnittlicher Last und Spitzen
- Die Anzahl der Partitionen und Replikate
- Themenkonfigurationen, z. B. Nachrichtenspeicherung
Für einen zuverlässigen Betrieb ist es wichtig, den Cluster auf diese Betriebsparameter zu überwachen und sie innerhalb der empfohlenen Bereiche zu halten. In den folgenden Abschnitten werden einige wichtige Messwerte beschrieben, die für die Zuverlässigkeit wichtig sind.
Clusterkapazität überwachen
Beobachten Sie die folgenden Signale, um eine Überlastung eines Clusters zu vermeiden. Erstellen Sie Benachrichtigungen, um informiert zu werden, wenn sie über einen längeren Zeitraum außerhalb des empfohlenen Bereichs liegen.
CPU-Auslastung. Versuchen Sie, die CPU-Auslastung auf allen Brokern unter 80 % zu halten.
Broker-Laufwerksauslastung: Achten Sie darauf, dass die Broker-Laufwerksauslastung unter 80 % bleibt.
Laufwerksgröße. Als sicheren Ausgangspunkt empfehlen wir mindestens
2*(segment.bytes)pro Partition und Broker. In der Praxis sind die tatsächlichen Speicherplatzanforderungen oft deutlich geringer.Standardmäßig wird eine Segmentdatei nach 7 Tagen geschlossen und in den Remotespeicher verschoben. In der Regel werden die meisten Partitionen in diesem Zeitraum mit weniger als
segment.bytesDaten belegt. Das bedeutet, dass die meisten Partitionen weniger alssegment.bytesSpeicherplatz belegen. Bevor Sie die Laufwerksgröße erhöhen, sollten Sie die Laufwerksauslastung beobachten, während Sie weitere Partitionen im Cluster erstellen.Anzahl der Partitionen: Versuchen Sie, weniger als 4.000 Partitionen pro Broker und weniger als 100.000 Partitionen pro Cluster zu verwalten.
Wenn die Kapazität Ihres Clusters niedrig ist, sollten Sie die folgenden Maßnahmen in Betracht ziehen:
Erhöhen Sie die vCPU-Anzahl des Clusters. Weitere Informationen finden Sie unter Kafka-Cluster aktualisieren.
Skalieren Sie den Cluster hoch, um weitere Broker hinzuzufügen. Informationen dazu, wie der Dienst Broker bereitstellt, finden Sie unter Broker-Bereitstellung.
Erhöhen Sie die Broker-Laufwerksgröße. Weitere Informationen finden Sie unter Broker-Laufwerksgröße konfigurieren.
In der folgenden Tabelle finden Sie Prometheus Query Language (PromQL)-Abfragen für diese Messwerte, die Sie einem benutzerdefinierten Cloud Monitoring-Dashboard hinzufügen können.
| Signal | PromQL-Abfrage |
|---|---|
| CPU-Auslastung | 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-Laufwerksauslastung | 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}] ) |
| Segmentgröße pro Partition | # 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}] ) |
| Partitionen pro Broker | max by (resource_container, location, cluster_id, broker_index) ( max_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
| Partitionen pro Cluster | max by (resource_container, location, cluster_id) ( max_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
Partitionsverteilung über Broker hinweg überwachen
Eine ungleichmäßige Last kann dazu führen, dass ein Kafka-Cluster Clientanfragen nicht ordnungsgemäß verarbeitet. Die Anzahl der Partitionen, die einem einzelnen Broker zugewiesen sind, sollte innerhalb von etwa 10 % der durchschnittlichen Partitionsanzahl pro Broker liegen. Suchen Sie nach Ausreißern in diesem Messwert.
Damit die Partitionen ausgeglichen bleiben, sollten Sie in Ihrem Cluster die automatische Neugewichtung beim Hochskalieren aktivieren.
In der folgenden Tabelle sind PromQL-Abfragen aufgeführt, mit denen Sie Partitionsungleichgewichte überwachen können.
| Signal | PromQL-Abfrage |
|---|---|
| Anzahl der Partitionen pro Broker | sum by (resource_container, location, cluster_id, broker_index) ( avg_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
| Partitionsungleichgewicht | 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 |
Partitionsreplikation überwachen
Die Datenreplikation ist entscheidend, um die Fehlertoleranz Ihrer Arbeitslasten zu gewährleisten. In einem fehlerfreien Cluster hat jede Partition in einem Thema die volle Anzahl von Replikaten, basierend auf dem konfigurierten Replikationsfaktor des Themas.
Verwenden Sie die folgenden Signale, um die Partitionsreplikation zu überwachen:
Unter der Mindestanzahl von synchronisierten Replikaten (ISRs). Wenn eine Partition weniger synchronisierte ISRs als das konfigurierte Minimum (
min.insync.replicas) hat, besteht ein erhebliches Risiko für Datenverlust und Verfügbarkeit. In der Regel wird diese Situation durch unzureichende Kapazität bei einem oder mehreren Brokern oder durch Infrastrukturfehler verursacht.Unterreplizierte Partitionen. Eine Partition ist unterrepliziert, wenn die Anzahl der synchronisierten Replikate unter den Replikationsfaktor fällt. Wenn eine Partition über mehrere Minuten hinweg unterrepliziert bleibt, liegt möglicherweise ein Problem mit den Brokern, der Speicherkapazität oder etwas anderem vor.
Während eines rollierenden Neustarts sind Broker nicht verfügbar, da sie neu gestartet werden. Dies führt zu einer vorübergehenden Unterreplikation. Diese Situation ist normal und erfordert kein Eingreifen.
In der folgenden Tabelle finden Sie PromQL-Abfragen, mit denen Sie die Replikation überwachen können.
| Signal | PromQL-Abfrage |
|---|---|
| Unter dem Mindest-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}] ) ) |
| Unter Replikation | 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}] ) ) |
Kontingent für Autorisierungsanfragen überwachen
Wenn ein Client eine Verbindung zu einem Cluster herstellt, wird die Autorisierung der Verbindung auf das Kontingent Cluster authenticate connection requests per minute per project per region angerechnet. Alle Cluster in einem Projekt und einer Region teilen sich dieses Kontingent. Wenn es überschritten wird, werden neue Clientverbindungen blockiert. Versuchen Sie, die Kontingentauslastung unter 80 % zu halten, und erstellen Sie Benachrichtigungen, um informiert zu werden, wenn die Auslastung hoch bleibt.
Wenn die Kontingentauslastung hoch ist, sollten Sie die folgenden Maßnahmen in Betracht ziehen:
Reduzieren Sie die Rate, mit der Clients unnötige neue Verbindungen erstellen. Konfigurieren Sie Ihre Clients beispielsweise so, dass sie bei Produktions- und Konsumfehlern einen exponentiellen Backoff verwenden, konsolidieren Sie Clientinstanzen, wo dies sinnvoll ist, und verwenden Sie vorhandene Verbindungen wieder.
Fordern Sie eine Kontingenterhöhung an. Weitere Informationen finden Sie unter Kontingente und Limits.
In der folgenden Tabelle finden Sie eine PromQL-Abfrage, mit der Sie die drei höchsten Kontingentauslastungen für Autorisierungsanfragen nach Projekt und Region überwachen können.
| Signal | PromQL-Abfrage |
|---|---|
| Die drei höchsten Kontingentauslastungen für Autorisierungsanfragen nach Projekt und Region | topk(3, sum by (project_id, location) ( rate( { "serviceruntime.googleapis.com/quota/rate/net_usage", monitored_resource="consumer_quota", service="managedkafka.googleapis.com", quota_metric="managedkafka.googleapis.com/cluster_authenticate_requests" }[${__interval}] ) ) / ( min by (project_id, location) ( min_over_time( { "serviceruntime.googleapis.com/quota/limit", monitored_resource="consumer_quota", service="managedkafka.googleapis.com", quota_metric="managedkafka.googleapis.com/cluster_authenticate_requests", limit_name="ClusterAuthPerMinutePerProjectPerRegion" }[${__interval}] ) ) / 60 ) ) |
Nächste Schritte
- Kafka-Cluster überwachen
- Kafka-Clientanwendungen überwachen
- Größe des Kafka-Clusters planen
- Benutzerdefinierte Dashboards erstellen und verwalten