Wenn Sie AVRO- oder JSON-Nachrichten aus einem Managed Service for Apache Kafka-Thema in eine BigQuery-Tabelle laden müssen, können Sie dazu eine Dataflow-Vorlage verwenden. In diesem Dokument wird beschrieben, wie Sie mit der Google Cloud Console eine Pipeline auf Grundlage dieser Vorlage einrichten. Sie können diese Pipeline auch mit der REST API oder der Google Cloud CLI einrichten.
VerwendeteGoogle Cloud -Produkte
Für die Dataflow-Vorlage „Kafka zu BigQuery“ werden die folgenden abrechenbaren Google Cloud Produkte verwendet. Mit dem Preisrechner können Sie eine Kostenschätzung für die voraussichtliche Nutzung erstellen.
- BigQuery: BigQuery ist das serverlose Data Warehouse von Google Cloud. In dieser Lösung dient BigQuery als Ziel für Ihre Kafka-Daten. Die BigQuery Streaming Write API wird verwendet, um die Daten in BigQuery zu schreiben. Anschließend können Sie diese Daten mit BigQuery mithilfe von SQL-Abfragen analysieren, mit BigQuery ML Modelle für maschinelles Lernen erstellen und Ihre Business Intelligence-Anwendungen damit betreiben.
- Dataflow: Dataflow ist ein vollständig verwalteter Dienst zur Datenverarbeitung. Die Kafka-zu-BigQuery-Dataflow-Vorlage verwendet Dataflow, um eine Pipeline zu erstellen, die Daten aus Ihrem Kafka-Thema liest, alle erforderlichen Transformationen ausführt und die Daten in BigQuery schreibt. Die Autoscaling- und Self-Healing-Funktionen von Dataflow sorgen dafür, dass Ihre Pipeline zuverlässig und effizient ausgeführt wird.
- Cloud Storage: Cloud Storage ist zwar nicht direkt am Kerndatenfluss beteiligt, kann aber zum Speichern Ihrer Avro-Schemadateien verwendet werden, wenn Sie die binäre Avro-Codierung für Ihre Kafka-Nachrichten verwenden. So kann die Dataflow-Pipeline die Struktur Ihrer Daten richtig interpretieren.
Außerdem wird in der Lösung auch Managed Service for Apache Kafka verwendet.
- Managed Service for Apache Kafka: Ein Google Cloud Dienst, der Sie bei der Ausführung von Apache Kafka unterstützt. Mit Managed Service for Apache Kafka können Sie sich auf das Erstellen von ereignisgesteuerten Systemen und Streaming-Datenpipelines konzentrieren, anstatt die Infrastruktur zu verwalten. Weitere Informationen zu den Preisen für Managed Service for Apache Kafka finden Sie in der Preisübersicht.
Hinweis
Bevor Sie die Dataflow-Vorlage für Kafka zu BigQuery starten, müssen Sie Folgendes erledigt haben:
Erstellen Sie einen Managed Service for Apache Kafka-Cluster und ein Thema.
Eine Möglichkeit, einen Cluster und ein Thema zu erstellen, ist die Kurzanleitung für Managed Service for Apache Kafka.
Wenn Ihr Thema Avro-Datensätze enthält, finden Sie zusätzliche Ressourcenanforderungen unter Kafka-Nachrichtenformat konfigurieren.
Aktivieren Sie die folgenden Google Cloud APIs:
Dataflow
BigQuery
Cloud Storage
gcloud services enable dataflow.googleapis.com bigquery.googleapis.com \ storage.googleapis.comBigQuery-Dataset und ‑Tabelle erstellen Das Schema der Tabelle muss mit dem Schema Ihres Kafka-Eingabethemas übereinstimmen.
Wenn Sie mehrere Schemas für dasselbe Thema verwenden und in mehrere Tabellen schreiben möchten, müssen Sie die Tabelle vor dem Konfigurieren der Pipeline nicht erstellen.
Weitere Informationen zum Erstellen eines BigQuery-Datasets und einer Tabelle finden Sie unter Dataset erstellen und Leere Tabelle mit einer Schemadefinition erstellen.
Dem Dataflow-Worker-Dienstkonto die Rolle „Managed Kafka Client“ gewähren
Wenn Sie Ihren Dataflow-Job mit Managed Service for Apache Kafka verbinden möchten, müssen Sie dem Dataflow-Worker-Dienstkonto bestimmte Berechtigungen gewähren. Dieses Dienstkonto ist die Identität, die für alle Worker-VMs in Ihrem Dataflow-Job verwendet wird. Alle Anfragen, die von diesen VMs gesendet werden, verwenden dieses Konto.
Damit auf Ihre Kafka-Ressourcen zugegriffen werden kann, müssen Sie dem Dataflow-Worker-Dienstkonto die Rolle roles/managedkafka.client zuweisen. Diese Rolle enthält die erforderliche Berechtigung managedkafka.clusters.connect zum Herstellen von Verbindungen.
Weitere Informationen zum Worker-Dienstkonto finden Sie unter Sicherheit und Berechtigungen für Pipelines in Google Cloud.
So gewähren Sie dem Dataflow-Dienstkonto die Rolle „Managed Kafka Client“:
Console
- Rufen Sie in der Google Cloud Console die Seite IAM auf.
IAM aufrufen - Prüfen Sie, ob das Projekt auf das Nutzerprojekt festgelegt ist, auf das der Managed Service for Apache Kafka-Client zugreifen würde.
- Klicken Sie auf Zugriff erlauben.
- Geben Sie auf der neuen Seite unter Hauptkonten hinzufügen die E-Mail-Adresse des Dataflow-Worker-Dienstkontos ein, das Sie verwenden.
- Wählen Sie unter Rollen zuweisen die Rolle Managed Kafka-Client aus.
- Klicken Sie auf Speichern.
gcloud-CLI
-
Aktivieren Sie Cloud Shell in der Google Cloud Console.
Unten in der Google Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.
-
Führen Sie den Befehl
gcloud projects add-iam-policy-bindingaus:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT_EMAIL \ --role roles/managedkafka.client
Ersetzen Sie Folgendes:
-
PROJECT_ID ist die Projekt-ID.
-
SERVICE_ACCOUNT_EMAIL ist die E-Mail-Adresse des Dataflow-Worker-Dienstkontos.
-
Dataflow-Vorlage „Kafka zu BigQuery“ starten
Sie können die Vorlage Kafka to BigQuery Dataflow über die Seite mit den Clusterdetails in der Console starten.
-
Rufen Sie in der Google Cloud Console die Seite Cluster auf.
Die Cluster, die Sie in einem Projekt erstellt haben, werden aufgeführt.
- Klicken Sie auf einen Clusternamen, um die Cluster-Detailseite aufzurufen.
- Klicken Sie auf der Cluster-Detailseite für ein beliebiges Thema unter Themen auf das Symbol für BigQuery-Export.
Die Seite Dataflow-Job mit der Vorlage „Kafka zu BigQuery“ erstellen wird geöffnet.
Konfigurieren Sie die Felder in der Vorlage gemäß den Informationen in den folgenden Abschnitten.
Geben Sie einen Jobnamen ein.
Geben Sie im Feld Jobname einen Namen für Ihren Dataflow-Job ein.
Der Name muss unter allen aktuell laufenden Jobs im Projekt eindeutig sein.
Regionalen Endpunkt für Ihre Pipeline auswählen
Legen Sie im Feld Regionaler Endpunkt den regionalen Endpunkt auf den Standort Ihres Kafka-Clusters oder des BigQuery-Datasets fest, um die Gebühren für die regionsübergreifende Datenübertragung zu minimieren.
Die Dataflow-Worker können unabhängig von der Region Ihres Kafka-Clusters ausgeführt werden. Wenn Sie Worker außerhalb der Region Ihres Kafka-Clusters starten, fallen jedoch Kosten für ausgehenden Traffic zwischen Regionen an.
Wenn Sie den Standort des Clusters aufrufen möchten, folgen Sie der Anleitung unter Managed Service for Apache Kafka-Cluster auflisten.
Dataflow-Vorlage auswählen
Behalten Sie für Dataflow-Vorlage den Standardwert Kafka zu BigQuery bei.
Quelle konfigurieren
Behalten Sie für Quelle den Standardwert Managed Service for Apache Kafka bei.
Die Standardwerte für Kafka-Cluster, Kafka-Thema und Modus der Kafka-Quellauthentifizierung sind bereits basierend auf dem ausgewählten Thema ausgewählt. Behalten Sie diese Werte bei.
Kafka-Nachrichtenformat konfigurieren
Die Dataflow-Vorlage unterstützt drei Nachrichtenformate:
Avro Confluent-Wire-Format: Jede Kafka-Nachricht enthält ein Magic Byte, eine Schema-ID und den binärcodierten Avro-Datensatz. Standardmäßig wird der Nachrichtenschlüssel nicht in BigQuery geladen.
Für Avro-Formate (Confluent-Wire-Format) können Sie entweder ein einzelnes Schema oder mehrere Schemas verwenden:
Einzelnes Schema: Alle Nachrichten entsprechen einem einzelnen vordefinierten Avro-Schema.
Mehrere Schemas: Für Nachrichten können verschiedene Schemas verwendet werden. Dies wird nur für das Avro-Format (Confluent-Wire-Format) unterstützt.
Avro (binär codiert): Nachrichten enthalten nur die Nutzlast des Datensatzes ohne Metadaten. Sie müssen eine Avro-Schemadatei (.avsc) angeben, die in Cloud Storage hochgeladen wurde. Alle Nachrichten müssen diesem einen Schema entsprechen.
JSON: Für Datensätze ist kein vordefiniertes Schema erforderlich. Datensätze, die nicht dem BigQuery-Tabellenschema entsprechen, werden an die Warteschlange für unzustellbare Nachrichten gesendet (falls konfiguriert) oder es wird eine Fehlermeldung protokolliert. Das unterstützte Format ist
{"field": "value"}. Das Format[{"name": "field", "value": "value"}]wird nicht unterstützt.
Avro Confluent-Wire-Format
Wenn Sie diese Option als Kafka-Nachrichtenformat auswählen, konfigurieren Sie die folgenden zusätzlichen Einstellungen:
Schemaquelle: In diesem Feld wird angegeben, wo das Schema zu finden ist. Wählen Sie eine der folgenden Optionen aus:
Schema-Registry: Ihre Schemas werden in einer Confluent-Schema-Registry gespeichert. Das ist nützlich, um Schemas weiterzuentwickeln und mehrere Versionen zu verwalten. Achten Sie darauf, dass die Schema-Registry für das Netzwerk des Managed Service for Apache Kafka-Clusters zugänglich ist und in derselben Region wie Ihre Dataflow-Worker gehostet wird. Sie können eine Schemaregistrierung sowohl für Szenarien mit einem als auch mit mehreren Schemas verwenden. Konfigurieren Sie die folgenden zusätzlichen Einstellungen:
Schema-Registry-Verbindungs-URL: Geben Sie die URL an, über die eine Verbindung zu Ihrer Schema-Registry hergestellt werden kann.
Authentifizierungsmodus: Wenn für Ihre Registry eine Authentifizierung erforderlich ist, wählen Sie OAuth oder TLS aus. Wählen Sie andernfalls Keine aus.
Einzelne Schemadatei: Wählen Sie diese Option aus, wenn alle Ihre Nachrichten einem einzelnen, festen Schema folgen, das in einer Datei definiert ist.
- Cloud Storage-Datei für die Avro-Schemadatei: Der Pfad zur Avro-Schemadatei, die zum Decodieren aller Nachrichten in einem Thema verwendet wird.
Managed Service for Apache Kafka bietet keine Schema-Registry. Die Vorlage unterstützt nur die Übergabe von Anmeldedaten für die Authentifizierung an Schemaregister, die mit dem Confluent-Wire-Format kompatibel sind.
Binärcodierung von Avro
Wenn Sie diese Option als Kafka-Nachrichtenformat auswählen, konfigurieren Sie die folgenden zusätzlichen Einstellungen:
- Cloud Storage-Datei für die Avro-Schemadatei: Der Pfad zur Avro-Schemadatei, die zum Decodieren aller Nachrichten in einem Thema verwendet wird.
JSON
Wenn Sie diese Option als Kafka-Nachrichtenformat auswählen, sind keine weiteren Konfigurationen erforderlich.
Konfigurieren, dass der Kafka-Schlüssel in der BigQuery-Tabelle gespeichert wird
Wenn Sie die Option Kafka-Nachrichtenschlüssel in der BigQuery-Tabelle speichern aktivieren, müssen Sie der Zieltabelle auch ein Feld mit dem Namen _key vom Typ BYTES hinzufügen.
Obwohl der Schlüssel strukturierte Daten darstellen kann, wird er in der Vorlage als Byte-Array behandelt.
Offset-Optionen angeben
Wenn Sie vermeiden möchten, dass Nachrichten noch einmal verarbeitet werden, wenn einzelne Worker oder die gesamte Pipeline neu gestartet werden müssen, wählen Sie die Option Commit offsets to Kafka aus. So wird sichergestellt, dass die Verarbeitung in Ihrer Pipeline an der Stelle fortgesetzt wird, an der sie unterbrochen wurde. Das verhindert eine doppelte Verarbeitung und potenzielle Dateninkonsistenzen.
Geben Sie im Feld Enter Consumer Group ID (Nutzergruppen-ID eingeben) einen eindeutigen Namen für die Gruppe dieser Pipeline ein. In den meisten Fällen soll die Pipeline jede Nachricht einmal lesen und neu gestartet werden können.
Für das Feld Standard-Kafka-Start-Offset bietet die Dataflow-Pipeline zwei Optionen für den Start-Offset. Entscheiden Sie sich für eine der folgenden Möglichkeiten:
Earliest: Verarbeitet Nachrichten vom Anfang des Kafka-Themas.
Latest: Nachrichten werden ab dem neuesten verfügbaren Offset verarbeitet.
Ziel konfigurieren
Mit diesen Optionen legen Sie fest, wie Daten in BigQuery geschrieben werden.
Im Feld Strategie für Tabellennamen wird festgelegt, wie Ihre Daten in BigQuery-Tabellen organisiert werden. Sie haben zwei Möglichkeiten:
Einzelner Tabellenname (Standard): Alle Daten aus Ihrem Kafka-Thema werden in eine einzelne BigQuery-Tabelle eingefügt. Dies ist die einfachste Option und die empfohlene Option, wenn Ihre Kafka-Daten dasselbe Schema haben.
Geben Sie für BigQuery-Ausgabetabelle den Namen der Tabelle an, in der alle Daten aus Ihrem Kafka-Thema gespeichert werden sollen.
Dynamische Tabellennamen: Erstellt mehrere BigQuery-Tabellen basierend auf dem Schema Ihrer Kafka-Nachrichten. Wir empfehlen diese Option, wenn Ihre Kafka-Nachrichten unterschiedliche Schemas haben. Diese Option funktioniert nur, wenn in Ihrer Pipeline Avro Confluent Wire oder Schema Registry zur Verarbeitung der Nachrichtenstruktur verwendet wird.
Für jedes eindeutige Schema in Ihren Kafka-Nachrichten wird eine eigene Tabelle in BigQuery erstellt. Die Tabellennamen werden automatisch anhand der Schemanamen generiert.
Wenn Sie Dynamische Tabellennamen auswählen, konfigurieren Sie die folgenden zusätzlichen Felder:
BigQuery-Ausgabeprojekt: Das Google Cloud Projekt, in dem sich Ihr BigQuery-Dataset befindet.
BigQuery-Ausgabe-Dataset: Das Dataset in Ihrem Projekt, in dem die Tabellen erstellt werden.
Präfix für BigQuery-Tabellennamen (optional): Fügen Sie den automatisch generierten Tabellennamen ein Präfix hinzu, um die Organisation zu verbessern.
BigQuery Storage Write API konfigurieren
Beginnen Sie für die Anzahl der Streams für die BigQuery Storage Write API mit 0 (Standard). Bei dieser Option wird die optimale Anzahl von Streams automatisch von der Pipeline bestimmt.
Mit dieser Einstellung wird festgelegt, wie viele parallele Streams zum Schreiben von Daten in BigQuery verwendet werden. Höhere Zahlen können die Schreibgeschwindigkeit verbessern, insbesondere bei großen Datenmengen. Die optimale Anzahl hängt von Ihren Daten und der BigQuery-Einrichtung ab.
Häufigkeit des Auslösens konfigurieren
Beginnen Sie für die Option Triggerhäufigkeit in Sekunden für die BigQuery Write API mit 5 Sekunden (Standard). Das ist für die meisten Anwendungsfälle ein guter Kompromiss.
Mit dieser Einstellung wird festgelegt, wie oft Daten in BigQuery geschrieben werden.
Niedrigere Zahlen bedeuten häufigere Schreibvorgänge. Dadurch kann die Latenz reduziert werden, aber die BigQuery-Kosten können steigen. Höhere Zahlen bedeuten weniger häufige Schreibvorgänge. Das kann kostengünstiger sein, aber die Latenz erhöhen.
Dead-Letter-Warteschlange konfigurieren
Manchmal können Nachrichten aufgrund von Beschädigungen, inkompatiblen Datentypen oder Schemaabweichungen bei der BigQuery-Zieltabelle nicht verarbeitet werden.
Um diese Fälle zu verarbeiten, aktivieren Sie die Warteschlange für unzustellbare Nachrichten in der Vorlage und geben Sie einen Tabellennamen an. Mit der Vorlage wird die Tabelle mit einem standardisierten Schema erstellt. Fehlerhafte Nachrichten werden in eine separate BigQuery-Tabelle geschrieben.
Verschlüsselung konfigurieren
Standardmäßig werden alle Daten im Ruhezustand und während der Übertragung durch eineGoogle-owned and Google-managed encryption keyverschlüsselt. Wenn Sie kundenverwaltete Verschlüsselungsschlüssel (Customer-Managed Encryption Keys, CMEK) haben, können Sie Ihre eigenen Schlüssel auswählen. Weitere Informationen zum Konfigurieren eines CMEK finden Sie unter Nachrichtenverschlüsselung konfigurieren.
Netzwerk konfigurieren
Sie müssen das Netzwerk und das Subnetzwerk des Clusters in der Dataflow-Vorlage angeben. Im Abschnitt Optionale Parameter der Vorlage können Sie das Netzwerk für Ihre Dataflow-Worker definieren.
Mit der Dataflow-Vorlage „Kafka zu BigQuery“ werden Dataflow-Worker standardmäßig im Standardnetzwerk Ihres Projekts bereitgestellt. Damit Ihr Managed Service for Apache Kafka-Cluster Daten über Dataflow an BigQuery senden kann, müssen Ihre Dataflow-Worker auf das Netzwerk Ihres Clusters zugreifen können.
Wenn Ihr Kafka-Cluster nicht mit einem Subnetz im Standardnetzwerk des Projekts verbunden ist, empfehlen wir, das Standardnetzwerk des Projekts für Ihren Kafka-Cluster zu verwenden.
Weitere Informationen zum Einrichten des Netzwerks für Ihre Dataflow-Pipeline finden Sie unter:
Wenn Sie Probleme bei der Konfiguration des Dataflow-Netzwerks haben, lesen Sie die Anleitung zur Fehlerbehebung bei Dataflow-Netzwerken.
Optionale Dataflow-Parameter konfigurieren
Konfigurieren Sie die optionalen Parameter nur, wenn Sie wissen, welche Auswirkungen die Konfiguration auf die Dataflow-Worker hat. Falsche Einstellungen können sich auf die Leistung oder die Kosten auswirken. Ausführliche Erläuterungen zu den einzelnen Optionen finden Sie unter Optionale Parameter.
Monitoring
Die Dataflow-Vorlage für Kafka zu BigQuery bietet ein Monitoring-Erlebnis, mit dem Sie Logs, Messwerte und Fehler in der Console untersuchen können. Diese Monitoring-Tools sind Teil der Dataflow-Benutzeroberfläche.
Auf dem Tab Jobmesswerte können Sie benutzerdefinierte Dashboards erstellen. Für die Vorlage „Kafka für BigQuery“ empfehlen wir, ein Dashboard für Jobmesswerte einzurichten, mit dem Folgendes überwacht wird:
Durchsatz: Das Datenvolumen, das zu einem bestimmten Zeitpunkt verarbeitet wird. Das ist nützlich, um den Datenfluss durch Ihren Job zu überwachen und potenzielle Leistungsprobleme zu erkennen.
Weitere Informationen finden Sie unter Dataflow-Durchsatzmonitoring.
Datenaktualität: Die Differenz in Sekunden zwischen dem Zeitstempel des Datenelements und dem Zeitpunkt, zu dem das Ereignis in Ihrer Pipeline verarbeitet wird. So lassen sich Leistungs- und Datenquellenengpässe oder häufige Wiederholungsversuche erkennen.
Weitere Informationen finden Sie unter Dataflow-Datenaktualität überwachen.
Rückstand: Die Menge der Bytes, die auf die Verarbeitung warten. Diese Informationen fließen in Autoscaling-Entscheidungen ein.
Weitere Informationen zum Dataflow-Monitoring finden Sie in der Dataflow-Monitoring-Dokumentation.
Fehlerbehebung
Wenn bei Ihrer Dataflow-Pipeline Leistungsprobleme auftreten, bietet Dataflow eine umfassende Reihe von Tools zur Fehlerbehebung und Diagnose.
Hier sind zwei häufige Szenarien und die entsprechenden Anleitungen zur Fehlerbehebung:
Eine allgemeine Übersicht zum Debuggen von Dataflow-Pipelines finden Sie unter Fehlerbehebung und Debugging von Dataflow-Pipelines.
Bekannte Einschränkungen
Die Vorlage unterstützt nicht die Übergabe von Anmeldedaten für die Authentifizierung an Ihre Schemaregistrierung.
Achten Sie beim Erstellen des Dataflow-Jobs „Kafka zu BigQuery“ darauf, dass das Google Cloud -Projekt auf dasselbe Projekt festgelegt ist, das den Managed Service for Apache Kafka-Cluster enthält.