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

Lesedauer: 6 Minute
0

Ich muss 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 wird als Summe der folgenden Werte berechnet:

  • Prozentsatz der CPU im Benutzerumgebung, der durch die Metrik CpuUser definiert wird
  • Prozentsatz der CPU im Kernelraum, der durch CpuSystem definiert wird

Es hat sich bewährt, die gesamte CPU-Auslastung auf weniger als 60 % zu beschränken, sodass 40 % der CPU Ihres Clusters verfügbar sind. Apache Kafka kann die CPU-Last nach Bedarf auf die Broker im Cluster umverteilen. Wenn Amazon MSK beispielsweise nach einem Brokerfehler wiederhergestellt wird, kann die verfügbare CPU verwendet werden, um automatische Wartungsarbeiten wie Patches durchzuführen.

Im Folgenden sind einige der häufigsten Ursachen für eine hohe CPU-Auslastung in Ihrem Amazon MSK-Cluster aufgeführt:

  • Der eingehende oder ausgehende Verkehr ist hoch.
  • Die Anzahl der Partitionen pro Broker wurde überschritten, wodurch der Cluster überlastet wurde.
  • Sie verwenden eine Instance vom Typ T.

Der eingehende oder ausgehende Verkehr ist hoch

Sie können den eingehenden und ausgehenden Datenverkehr zum Cluster mithilfe der Amazon CloudWatch-Metriken BytesInPerSec und BytesOutPerSec überwachen. Wenn diese Metriken für einen Broker hohe Werte aufweisen oder verzerrt sind, weist der Broker möglicherweise eine hohe CPU-Auslastung auf. Im Folgenden sind einige der Ursachen für hohen eingehenden und ausgehenden Verkehr aufgeführt:

  • Die Anzahl der Partitionen für das Thema, das stark frequentiert wird, ist nicht gleichmäßig auf die Broker verteilt. Oder der Producer sendet Daten nicht gleichmäßig an alle Partitionen. Überprüfen Sie unbedingt Ihren Producer-Partitionierungsschlüssel und aktualisieren Sie die Cluster-Konfiguration entsprechend. Stellen Sie sicher, dass Sie den Partitionsschlüssel so konfigurieren, dass eine Partition nicht mehr Daten erhält als die anderen.
  • Die Nutzergruppe nimmt häufige Offsets vor. Der Verkehr von Offset-Commits wirkt sich auf den Broker aus. In solchen Fällen wird ein deutlich hoher MessagesInPerSec-Wert für den Broker angezeigt, der für die _consumer_offset Themen-Partition an erster Stelle steht. Dies ist die Partition, an der der Offset der Nutzergruppe vorgenommen wurde. Um dieses Problem zu lösen, reduzieren Sie die Anzahl der Nutzergruppen oder erhöhen Sie die Größe Ihrer Instance.

Die Anzahl der Partitionen pro Broker wurde überschritten

Wenn die Anzahl der Partitionen pro Broker den empfohlenen Wert überschreitet, ist Ihr Cluster überlastet. In diesem Fall ist es Ihnen möglicherweise nicht möglich, Folgendes zu tun:

  • Aktualisieren der Cluster-Konfiguration.
  • Aktualisieren der Apache Kafka-Version für den Cluster.
  • Aktualisieren des Clusters auf einen kleineren Brokertyp.
  • Ordnen Sie einem Cluster mit SASL/SCRAM-Authentifizierung ein AWS Secrets Manager-Geheimnis zu.

Zu viele Partitionen führen aufgrund der hohen CPU-Auslastung zu Leistungseinbußen. Dies bedeutet, dass jede Partition eine gewisse Menge an Broker-Ressourcen verwendet, auch wenn wenig Verkehr herrscht. Gehen Sie wie folgt vor, um dieses Problem zu beheben:

  • Löschen Sie veraltete oder ungenutzte Themen, um die Anzahl der Partitionen innerhalb der empfohlenen Grenze zu halten.
  • Skalieren Sie den Broker-Instance-Typ auf den Typ hoch, der die Anzahl der benötigten Partitionen aufnehmen kann. Versuchen Sie auch, weitere Broker hinzuzufügen und Partitionen neu zuzuweisen.

Beachten Sie, dass Partitionen nicht automatisch neu zugewiesen werden, wenn Sie Broker hinzufügen. Sie müssen den Befehl kafka-reassign-partitions ausführen. Weitere Informationen finden Sie unter Partitionen neu zuweisen, nachdem Sie die Clustergröße geändert haben.

Sie verwenden eine Instance vom Typ T

Beachten Sie, dass Instances vom Typ T eine Grundleistung mit einigen Burstable-Funktionen aufweisen. Diese Instances ermöglichen Ihnen eine Grundleistung von 20 % CPU-Auslastung. Wenn Sie diesen Wert überschreiten, beginnt der Instance-Typ, CPU-Credits zu verwenden. Wenn die Auslastung unter 20 % liegt, wird CPU-Guthaben gesammelt.

Achten Sie darauf, die CPU-Guthaben-Metrik in Amazon CloudWatch im Auge zu behalten. Credits werden dem Guthaben gutgeschrieben, nachdem sie verdient wurden, und vom Guthaben abgezogen, wenn sie ausgegeben werden. Für das Guthaben gilt eine Obergrenze, die durch die Instance-Größe bestimmt wird. Sobald diese Grenze erreicht ist, werden alle neu verdienten Credits verworfen. Beim Instance-Typ T2 Standard wird das Startguthaben nicht auf die Grenze angerechnet.

Die in der CPUCreditBalance-Metrik angegebenen CPU-Credits stehen der Instance zur Verfügung, um die CPU-Basisauslastung zu überschreiten. Solange eine Instance läuft, laufen die Credits in CPUCreditBalance nicht ab. Wenn eine T4g-, T3a- oder T3-Instance beendet wird, bleibt der CPUCreditBalance-Wert sieben Tage lang bestehen. Nach sieben Tagen verfallen alle aufgelaufenen Credits. Wenn eine T2-Instance beendet wird, bleibt der CPUCreditBalance-Wert nicht bestehen und alle aufgelaufenen Credits verfallen. Die CPU-Credit-Metriken sind in einer Frequenz von fünf Minuten verfügbar.

Achten Sie darauf, die CPU-Basisauslastung und das Guthaben für jeden Cluster, der auf Instances vom Typ T ausgeführt wird, im Blick zu behalten. Wenn die CPU-Auslastung über dem Basiswert liegt und kein Guthaben mehr ausgegeben werden kann, treten im Cluster Leistungsprobleme auf.

Andere Ursachen

  • Die Anzahl der Verbindungen zum Client ist hoch: Ein Spitzenwert bei einer der folgenden CloudWatch-Metriken kann dazu führen, dass die ausfallende CPU-Auslastung steigt. Um dieses Problem zu beheben, überwachen Sie diese Metriken auf CloudWatch. Reduzieren Sie dann die Anzahl der Verbindungen nach Bedarf oder skalieren Sie den Brokertyp hoch.
    • ConnectionCount
    • ConnectionCreationRate
    • ConnectionCloseRate
  • Die Anzahl der Nutzergruppen ist hoch: Wenn die Anzahl der Nutzergruppen hoch ist (z. B. mehr als 1000), kann die CPU-Auslastung für den Broker steigen. Eine hohe CPU-Auslastung kann auch die Folge sein, wenn eine Nutzergruppe zu häufig Offsets vornimmt. Um dieses Problem zu lösen, reduzieren Sie die Anzahl der Nutzergruppen oder erhöhen Sie die Größe Ihrer Instance.
  • Amazon MSK erkennt einen Brokerfehler und behebt diesen: In diesem Fall führt Amazon MSK einen automatischen Wartungsvorgang wie etwa Patches durch, was zu einer erhöhten CPU-Auslastung führt.
  • Ein Benutzer fordert eine Änderung des Brokertyps oder ein Versionsupgrade an: In diesem Fall setzt Amazon MSK fortlaufende Workflows ein, 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 weiterzuverteilen. Überwachen Sie die CPU-Auslastung dieser Broker und stellen Sie sicher, dass Sie in Ihrem Cluster über ausreichend CPU-Freiraum verfügen, um Betriebsereignisse zu tolerieren.
  • Die CPU-Auslastung für einen oder mehrere Broker ist aufgrund der verzerrten Datenverteilung hoch: Wenn beispielsweise auf zwei von sechs Broker geschrieben wird und diese am meisten beansprucht werden, wird für sie eine höhere CPU-Auslastung festgestellt. Um dieses Problem zu beheben, stellen Sie sicher, dass Sie die Round-Robin-Technik verwenden, damit die Partitionen im Cluster gleichmäßig verteilt sind. Führen Sie den Befehl topic describe aus, um zu sehen, wie die Partitionen im Cluster verteilt sind. Die Ausgabe könnte wie folgt aussehen:
bin/kafka-topics.sh -bootstrap-server $MYBROKERS --describe --topic my-topic
    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
  • Sie haben die offene Überwachung aktiviert: Wenn Sie die offene Überwachung mit Prometheus aktiviert haben und das Scrape-Intervall niedrig ist, kann dies zu einer hohen Anzahl ausgegebener Messwerte führen. Dies führt zu einer Erhöhung der CPU-Auslastung. Erhöhen Sie das Scrape-Intervall, um dieses Problem zu beheben.
AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr