Best Practices für Pub/Sub zu BigQuery

Auf dieser Seite finden Sie Best Practices zum Optimieren einer Dataflow-Pipeline, die Daten aus Pub/Sub liest und in BigQuery schreibt. Je nach Anwendungsfall können die folgenden Vorschläge zu einer besseren Leistung führen.

Erste Lösungen für Pipeline-Rückstände

Wenn bei einer Pub/Sub-zu-BigQuery-Pipeline ein wachsender Rückstand auftritt und sie mit eingehenden Nachrichten nicht Schritt halten kann, können Sie die folgenden sofortigen Maßnahmen ergreifen:

  • Pub/Sub-Bestätigungsfrist verlängern:Verlängern Sie die Bestätigungsfrist für das zugehörige Pub/Sub-Abo auf einen Wert, der etwas länger ist als die maximal erwartete Nachrichtenverarbeitungszeit. So wird verhindert, dass Nachrichten vorzeitig noch einmal zugestellt werden, während sie noch verarbeitet werden.
  • Worker skalieren:Wenn die Anzahl der nicht bestätigten Nachrichten und der Abo-Rückstand schnell wachsen, ist die Verarbeitungskapazität der Pipeline wahrscheinlich nicht ausreichend. Erhöhen Sie die Anzahl der Dataflow-Worker, um das Nachrichtenvolumen zu bewältigen.
  • Exponentiellen Backoff aktivieren:Aktivieren Sie den exponentiellen Backoff, um die Verarbeitung von Wiederholungsversuchen bei vorübergehenden Problemen in der Pipeline zu verbessern und die Pipeline robuster zu machen.

Langfristige Code- und Pipeline-Optimierungen

Für eine nachhaltige Leistung und Stabilität werden die folgenden Architektur- und Codeänderungen empfohlen:

  • getTable-Aufrufe an BigQuery reduzieren:Zu viele getTable-Methodenaufrufe können zu Ratenbegrenzungen und Leistungsengpässen führen. So können Sie das Problem beheben:
    • Informationen zur Existenz von Tabellen im Arbeitsspeichercache speichern, um wiederholte Aufrufe für dieselbe Tabelle zu vermeiden.
    • Batch-Aufrufe getTable erfolgen auf Set-Basis anstatt für jedes einzelne Element.
    • Refaktorieren Sie den Pipelinecode, damit nicht für jede Nachricht geprüft werden muss, ob die Tabelle vorhanden ist.
  • BigQuery Storage Write API verwenden:Migrieren Sie für Streamingpipelines, die in BigQuery schreiben, von Standard-Streaming-Insert-Anweisungen zur Storage Write API. Die Storage Write API bietet eine bessere Leistung und deutlich höhere Kontingente.
  • Legacy-Dataflow-Runner für Jobs mit hoher Kardinalität verwenden:Bei Jobs, bei denen eine sehr große Anzahl eindeutiger Schlüssel (hohe Kardinalität) verarbeitet wird, bietet der Legacy-Dataflow-Runner möglicherweise eine bessere Leistung als Runner v2, sofern keine sprachübergreifenden Transformationen erforderlich sind.
  • Schlüsselbereich optimieren:Die Leistung kann nachlassen, wenn Pipelines mit Millionen aktiver Schlüssel arbeiten. Passen Sie die Logik der Pipeline an, um die Arbeit an einem kleineren, besser verwaltbaren Schlüsselbereich auszuführen.

Ressourcen-, Kontingent- und Konfigurationsverwaltung

Eine korrekte Ressourcenzuweisung und ‑konfiguration sind entscheidend für den Zustand der Pipeline:

  • Kontingente proaktiv verwalten:Kontingente im Blick behalten und Erhöhungen für alle Kontingente anfordern, die während Skalierungsereignissen erreicht werden könnten. Betrachten Sie beispielsweise die folgenden Skalierungsereignisse:
    • Eine hohe Anzahl von Aufrufen der Methoden TableService.getTable oder tabledata.insertAll kann die maximale Anzahl von Abfragen pro Sekunde (QPS) überschreiten. Weitere Informationen zu Limits und dazu, wie Sie mehr Kontingent anfordern können, finden Sie unter BigQuery-Kontingente und -Limits.
    • Compute Engine-Kontingente für verwendete IP-Adressen und CPUs können die maximalen Limits überschreiten. Weitere Informationen zu Limits und zum Anfordern von mehr Kontingent finden Sie in der Übersicht zu Compute Engine-Kontingenten und ‑Limits.
  • Worker-Konfiguration optimieren:So vermeiden Sie Fehler aufgrund von unzureichendem Arbeitsspeicher (Out-of-memory, OOM) und verbessern die Stabilität:
    • Verwenden Sie Worker-Maschinentypen mit mehr Arbeitsspeicher.
    • Reduzieren Sie die Anzahl der Threads pro Worker.
    • Legen Sie eine höhere Anzahl von Workern fest, um die Arbeitslast gleichmäßiger zu verteilen und die Auswirkungen häufiger Autoscaling-Ereignisse auf die Leistung zu verringern.

Nächste Schritte