Direkt zum Inhalt

Wie behebe ich die hohe CPU-Auslastung bei einem oder mehreren Brokern in einem Amazon-MSK-Cluster?

Lesedauer: 6 Minute
0

Ich möchte Probleme mit der hohen CPU-Auslastung bei einem oder mehreren Brokern in meinem Amazon Managed Streaming für Apache Kafka (Amazon MSK)-Cluster beheben.

Lösung

Die gesamte CPU-Auslastung für einen Amazon-MSK-Cluster ist die Summe der folgenden Werte:

  • Prozentsatz der CPU im Benutzerbereich, der durch die Metrik CpuUser definiert wird
  • Prozentsatz der CPU im Kernel-Bereich, der durch CpuSystem definiert wird

Es hat sich bewährt, die gesamte CPU-Auslastung unter 60 % zu halten, sodass 40 % der CPU des Clusters verfügbar sind. Apache Kafka kann die CPU-Last nach Bedarf auf die Broker im Cluster umverteilen. Wenn beispielsweise ein Brokerfehler auftritt, kann Amazon MSK die verfügbare CPU verwenden, um automatische Wartungsmaßnahmen wie Patches durchzuführen.

Der Amazon-MSK-Cluster weist möglicherweise aus einem der folgenden Gründe eine hohe CPU-Auslastung auf:

  • Der eingehende oder ausgehende Datenverkehr ist hoch.
  • Du überschreitest die Anzahl der Partitionen pro Broker und überlastest den Cluster.
  • Du verwendest einen T-Instance-Typ.

Der eingehende oder ausgehende Datenverkehr ist hoch

Verwende die Amazon-CloudWatch-Metriken BytesInPerSec und BytesOutPerSec, um den eingehenden und ausgehenden Datenverkehr zum Cluster zu überwachen. Wenn diese Metriken für einen Broker hohe Werte aufweisen oder verzerrt sind, kann es beim Broker zu einer hohen CPU-Auslastung kommen.

Bei Brokern kann es zu hohem Datenverkehr kommen, wenn Themen mit hohem Volume eine ungleichmäßige Verteilung der Partitionen aufweisen. Oder der Producer verteilt die Daten nicht gleichmäßig auf alle Partitionen. Um dieses Problem zu beheben, überprüfe deinen Producer-Partitionierungsschlüssel und aktualisiere die Cluster-Konfiguration. Konfiguriere dann den Partitionsschlüssel so, dass eine Partition nicht mehr Daten erhält als die anderen.

Es kann auch zu hohem Datenverkehr kommen, wenn die Consumergruppe sehr häufig Offsets vornimmt. Der Datenverkehr von Offset-Commits wirkt sich auf den Broker aus. Um dieses Problem zu beheben, reduziere die Anzahl der Consumergruppen oder aktualisiere die Instance-Größe der Instance.

Die Anzahl der Partitionen pro Broker überschreitet den empfohlenen Wert

Wenn die Anzahl der Partitionen pro Broker den empfohlenen Wert überschreitet, ist der Cluster überlastet. Wenn der Cluster überlastet ist, kannst du die folgenden Maßnahmen nicht ergreifen:

  • Die Cluster-Konfiguration aktualisieren
  • Die Apache-Kafka-Version für den Cluster aktualisieren
  • Den Cluster auf einen kleineren Brokertyp aktualisieren
  • Ordne einem Cluster mit SASL/SCRAM-Authentifizierung ein AWS-Secrets-Manager-Secret zu.

Wenn du zu viele Partitionen hast, hast du möglicherweise eine hohe CPU-Auslastung und es kommt zu Leistungseinbußen.

Gehe wie folgt vor, um dieses Problem zu beheben:

  • Lösche veraltete oder ungenutzte Themen, um die Anzahl der Partitionen innerhalb der empfohlenen Grenze zu halten. Um das ungenutzte Thema zu identifizieren, aktiviere die Überwachung auf Themenebene und überprüfe die Metriken BytesInPerSec and BytesOutPerSec auf Themenebene, um festzustellen, ob Datenverkehr durch das Thema fließt. Wenn kein Datenverkehr durchfließt, kannst du die unbenutzten Themen löschen.
  • Skaliere den Broker-Instance-Typ auf einen Typ hoch, der die Anzahl der benötigten Partitionen aufnehmen kann. Füge außerdem weitere Broker hinzu und weise Partitionen neu zu.

Hinweis: Du musst den Befehl kafka-reassign-partitions ausführen, um Partitionen neu zuzuweisen. Amazon MSK weist Partitionen nicht automatisch neu zu, wenn du Broker hinzufügst.

Du verwendest einen T-Instance-Typ

T-Instance-Typen haben eine Basisleistung mit einigen burstfähigen Funktionen. Diese Instances ermöglichen dir eine Basisleistung von 20 % CPU-Auslastung. Wenn du diesen Wert überschreitest, beginnt der Instance-Typ, CPU-Guthaben zu nutzen. Wenn die Auslastung weniger als 20 % beträgt, sammelst du CPU-Guthaben an.

Stelle sicher, dass du die CPU-Guthabenstandsmetrik für burstfähige Instances in Amazon CloudWatch überwachst.

Überwache die CPU-Basisauslastung und den Guthabenstand für jeden Cluster, der auf T-Instance-Typen ausgeführt wird. Wenn die CPU-Auslastung über dem Basiswert liegt und kein Guthaben mehr ausgegeben werden kann, treten im Cluster Leistungsprobleme auf.

Andere mögliche Ursachen

Die Anzahl der Verbindungen zum Client ist hoch

Ein Spitzenwert bei einer der folgenden Amazon-CloudWatch-Metriken kann dazu führen, dass die CPU-Auslastung des Brokers steigt:

  • ConnectionCount
  • ConnectionCreationRate
  • ConnectionCloseRate

Um dieses Problem zu beheben, überwache diese Metriken auf Amazon CloudWatch. Reduziere dann die Anzahl der Verbindungen nach Bedarf oder skaliere den Brokertyp hoch.

Amazon MSK erkennt einen Brokerfehler und behebt ihn

Wenn Amazon MSK einen Brokerfehler erkennt und einen automatischen Wartungsvorgang wie z. B. einen Patch durchführt, steigt die CPU-Auslastung. Sobald Amazon MSK den Cluster-Betrieb abgeschlossen hat, sinkt die CPU-Auslastung auf das normale Nutzungsniveau.

Ein(e) Benutzer:in fordert eine Änderung des Brokertyps oder ein Versions-Upgrade an

Wenn Benutzer eine Änderung des Brokerytyps oder ein Versions-Upgrade anfordern, stellt Amazon MSK parallele Workflows bereit, die jeweils einen Broker offline schalten. Wenn Broker mit Hauptpartitionen offline gehen, weist Apache Kafka die Partitionsleitung neu zu, um die Arbeit an andere Broker im Cluster neu zu verteilen. Überwache die CPU-Auslastung dieser Broker und stelle sicher, dass du im Cluster über einen ausreichenden CPU-Toleranzbereich verfügst, um Betriebsereignisse zu tolerieren.

Die CPU-Auslastung für einen oder mehrere Broker ist aufgrund der ungleichen Datenverteilung hoch

Die CPU-Auslastung für einen oder mehrere Broker ist aufgrund der ungleichen Datenverteilung hoch. Wenn du beispielsweise auf zwei von sechs Brokern schreibst und diese Broker am meisten beansprucht werden, wird für sie eine höhere CPU-Auslastung festgestellt. Um dieses Problem zu beheben, stelle sicher, dass du die Roundrobin-Technik verwendest, damit die Partitionen im Cluster gleichmäßig verteilt sind.

Führe den folgenden Befehl aus, um zu sehen, wie der Apache-Kafka-Cluster-Controller die Partitionen über den Cluster verteilt:

bin/kafka-topics.sh -bootstrap-server $MYBROKERS --describe --topic my-topic

Beispielausgabe:

Topic:my-topic    PartitionCount:7 ReplicationFactor:3 Configs:
    Topic: my-topic    Partition: 0 Leader: 1 Replicas: 1,3,2 Isr: 1,3,2
    Topic: my-topic    Partition: 1 Leader: 2 Replicas: 2,1,3 Isr: 2,1,3
    Topic: my-topic    Partition: 2 Leader: 3 Replicas: 3,2,1 Isr: 3,2,1
    Topic: my-topic    Partition: 3 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3
    Topic: my-topic    Partition: 4 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1
    Topic: my-topic    Partition: 5 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2

Du hast die offene Überwachung aktiviert

Wenn du die offene Überwachung mit Prometheus aktivierst und das Erfassungsintervall niedrig ist, kann dies zu einer hohen Anzahl ausgegebener Metriken und dann zu einer Erhöhung der CPU-Auslastung führen. Erhöhe das Erfassungsintervall, um dieses Problem zu beheben. Es hat sich bewährt, 1 Erfassung pro Minute pro Broker nicht zu überschreiten, um die Leistung des Amazon-MSK-Clusters zu erhalten. Standardmäßig erfolgt das Erfassungsintervall alle 10–15 Sekunden.

AWS OFFICIALAktualisiert vor 4 Monaten