Von Pub/Sub Lite zu Apache Kafka für BigQuery migrieren

In diesem Dokument wird beschrieben, wie Sie Daten von einem Pub/Sub Lite-Thema zu einem Apache Kafka for BigQuery-Thema migrieren.

Hinweise

  1. Aktivieren Sie die Google Kubernetes Engine API.
  2. Bestimmen Sie ein zu migrierendes Pub/Sub Lite-Thema. Legen Sie in Apache Kafka für BigQuery einen Namen für das Zielthema fest. Bestimmen Sie außerdem, zu welchem Apache Kafka for BigQuery-Cluster Sie migrieren.

Migrationsworkflow

Führen Sie die folgenden Aufgaben aus, um Ihre Daten zu migrieren. Die spezifischen Details dieser Aufgaben finden Sie weiter unten auf dieser Seite.

  1. Erstellen Sie ein Google Kubernetes Engine-Dienstkonto.
  2. Erstellen Sie einen Google Kubernetes Engine-Cluster.
  3. Passen Sie ein Docker-Image mit den Konfigurationsdetails Ihrer Themen an.
  4. Stellen Sie das Docker-Image in einem Google Kubernetes Engine-Cluster bereit.

    Im Bild werden Kafka Connect und das Pub/Sub Lite-Plug-in für Kafka Connect verwendet, um ein neues Pub/Sub Lite-Abo zu abonnieren und in Apache Kafka für BigQuery zu veröffentlichen.

Google Kubernetes Engine-Dienstkonto erstellen

In diesem Abschnitt wird beschrieben, wie Sie ein IAM-Dienstkonto erstellen, das die erforderlichen Berechtigungen zum Ausführen eines Google Kubernetes Engine-Clusters hat.

  1. Erstellen Sie in der Google Cloud Console ein neues IAM-Dienstkonto mit den Mindestberechtigungen, die zum Ausführen von Google Kubernetes Engine erforderlich sind.

  2. Gewähren Sie dem Dienstkonto die folgenden zusätzlichen IAM-Rollen. Diese Rollen erleichtern den Migrationsprozess.

    • Verwaltete Kafka-Clientrolle (roles/managedkafka.client)
    • Pub/Sub Lite-Abonnentenrolle (roles/pubsublite.subscriber)
    • Pub/Sub Lite-Betrachter (roles/pubsublite.Viewer)
    • Artifact Registry-Leserrolle (roles/artifactregistry.reader)

GKE-Cluster erstellen

In diesem Abschnitt wird beschrieben, wie Sie einen GKE-Cluster erstellen, der das im vorherigen Schritt erstellte Dienstkonto verwendet.

  1. Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite "Google Kubernetes Engine"

  2. Klicken Sie auf Erstellen.

    Die Seite Autopilot-Cluster erstellen wird angezeigt.

  3. Ändern Sie auf dem Tab Erweiterte Einstellungen das Dienstkonto in das IAM-Dienstkonto, das Sie im vorherigen Schritt erstellt haben.

  4. Optional können Sie nach Bedarf weitere Einstellungen konfigurieren.

  5. Klicken Sie zum Erstellen des Clusters auf Erstellen.

Kafka Connect-Docker-Image erstellen

In diesem Abschnitt wird beschrieben, wie Sie ein Kafka Connect-Docker-Image für Ihr Thema erstellen und anpassen.

  1. Klonen Sie das GitHub-Repository für die Pub/Sub Lite-Migration.
  2. Für das IAM-Dienstkonto, das Sie zuvor erstellt haben, generieren Sie einen JSON-Kontoschlüssel.

    Verwenden Sie ein base64-Tool, um den JSON-Schlüssel zu codieren. Beispiel:

    Linux

    base64 -w 0 < my_service_account.json > password.txt
    

    Mac

    base64 < account_key_json > password.txt
    
  3. Aktualisieren Sie in den Secrets-Dateien im GitHub-Repository die folgenden Dateien mit den entsprechenden Informationen, um das Repository mit Ihrem Google Cloud-Projekt, Pub/Sub Lite und Kafka zu verknüpfen.

    .gcp/gmk_sasl_service_account → sensitive
    <service-account-name>@<gcp-project>.iam.gserviceaccount.com
    
    .gcp/gmk_sasl_service_account_key → sensitive
    <base64 encoded sasl service account key>
    
    .gcp/kafka_ssl_truststore_location → sensitive
    <full path of the ssl truststore jks file location>
    
    .gcp/kafka_ssl_truststore_password → sensitive
    <password for the ssl truststore jks>
    
    .gcp/gmk_bootstrap_servers → environment specific
    bootstrap.<google-managed-kafka-cluster-name>.<google-managed-kafka-cluster-region name>.managedkafka.<google-managed-cluster-host-project-name>.cloud.goog:9092
    
    .gcp/kafka_connect_group_id → environment specific
    <Kafka Connect group id (unique per worker group) for the Kafka connect workers in distributed mode>
    
    .gcp/kafka_config_storage_topic → environment specific
    <Kafka topic name used by Kafka Connect for tracking the config>
    
    .gcp/kafka_offset_storage_topic → environment specific
    <Kafka topic name used by Kafka Connect for tracking the offsets>
    
    .gcp/kafka_status_storage_topic → environment specific
    <Kafka topic name used by Kafka Connect for tracking the status>
    
    .gcp/kafka_sink_topic → environment specific
    <target sink Kafka topic name used by Kafka Connect for migrating the data from the Pub/Sub Lite topic>
    
    .gcp/pubsub_lite_gcp_project → environment specific
    <Google Cloud project that hosts the Pub/Sub Lite source subscription to be used for migrating the Pub/Sub Lite topic to sink the Kafka topic>
    
    .gcp/pubsub_lite_gcp_location → environment specific
    <Google Cloud location for the Pub/Sub Lite source subscription tor migrate the Pub/Sub Lite topic to sink Kafka topic>
    
    .gcp/pubsub_lite_subscription → environment specific
    <Pub/Sub Lite source subscription name to be used for migrating the pubsub lite topic to Kafka topic>
    
  4. Erstellen Sie das Docker-Image, indem Sie die Datei docker/build-image.sh ausführen.

    ./push-image.sh
    
  5. Aktualisieren Sie das Image docker/push-image.sh mit dem Namen Ihres Google Cloud-Projekts.

  6. Führen Sie die Datei docker/push-image.sh aus, um das Image per Push an Artifact Registry zu übertragen.

    ./push-image.sh
    

Kafka Connect-Arbeitslast bereitstellen

In diesem Abschnitt wird beschrieben, wie Sie das Docker-Image von Kafka Connect in einem Google Kubernetes Engine-Cluster bereitstellen.

  1. Installieren und konfigurieren Sie kubectl mit dem Authentifizierungs-Plug-in.
  2. Generieren Sie die Binärdatei für Ihren Google Kubernetes Engine-Cluster.
  3. Erstellen Sie ein Google Kubernetes Engine-Dienstkonto und gewähren Sie es mit den entsprechenden Berechtigungen, um die Identität Ihres IAM-Kontos zu übernehmen.

    $KSA_NAME = KUBERNETES_SERVICE_ACCOUNT_NAME
    $PROJECT_ID = GOOGLE_CLOUD_PROJECT_ID
    $IAM_SA_NAME = IAM_SERVICE_ACCOUNT_NAME
    
    kubectl create serviceaccount $KSA_NAME \
        --namespace=default
    
    gcloud iam service-accounts add-iam-policy-binding \
    $IAM_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:$PROJECT_ID.svc.id.goog[default/$KSA_NAME]"
    
    kubectl annotate serviceaccount $KSA_NAME \
        --namespace default \
    iam.gke.io/gcp-service-account=$IAM_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com
    
  4. Öffnen Sie die Datei K8s.yaml in einem Texteditor und aktualisieren Sie die folgenden Werte.

    1. Ersetzen Sie <workflow_name> durch den Namen Ihres Kafka Connect-Workflows.
    2. Ersetzen Sie <gke_service_account> durch den Namen des Google Kubernetes Engine-Dienstkontos.
  5. Führen Sie die Datei K8s.yaml aus.

    kubectl create -f k8s.yaml
    

    Dadurch wird eine Kafka Connect-Arbeitslast erstellt, die in Ihrem Google Kubernetes Engine-Cluster ausgeführt wird, und der Pub/Sub Lite-Connector wird gestartet, um Daten aus Ihrem Pub/Sub Lite-Thema zu Apache Kafka für BigQuery zu verschieben.

Jobs überwachen

Sobald ein Job ausgeführt wird, können Sie ihn überprüfen. Stellen Sie dazu eine Verbindung zum Kafka Connect-REST-Endpunkt her.

  1. Rufen Sie in der Google Cloud Console die Seite Bereitstellungsdetails > Arbeitslast auf.
  2. Klicken Sie auf Ihr Kubernetes-Deployment.

    Die Seite mit den Bereitstellungsdetails wird geöffnet.

  3. Klicken Sie unter Dienste verfügbar machen auf Freigeben und fügen Sie dann Port 8083 hinzu.

  4. Aktivieren Sie die Portweiterleitung.

    Der Standardlink, den Sie durch die Einrichtung der Portweiterleitung erhalten, gibt in etwa folgende Ausgabe zurück:

    {"version":"3.4.0","commit":"2e1947d240607d53","kafka_cluster_id":"6H6qWA0dQnuK31hBPqYUDg"}
    

    Wenn Sie /connectors an den Link anhängen, wird der laufende Connector aufgelistet. Beispiel:

    ["PubSubLiteSourceConnector"]
    

    Wenn Sie beispielsweise diesen Link prüfen, url:8083/connectors/PubSubLiteSourceConnector/status, erhalten Sie eine Liste von Aufgaben und deren Status.

    {"name":"PubSubLiteSourceConnector","connector":{"state":"RUNNING","worker_id":"10.53.0.157:8083"},"tasks":[{"id":0,"state":"RUNNING","worker_id":"10.53.0.139:8083"},{"id":1,"state":"RUNNING","worker_id":"10.53.0.157:8083"},{"id":2,"state":"RUNNING","worker_id":"10.53.0.139:8083"},{"id":3,"state":"RUNNING","worker_id":"10.53.0.157:8083"},{"id":4,"state":"RUNNING","worker_id":"10.53.0.157:8083"},{"id":5,"state":"RUNNING","worker_id":"10.53.0.139:8083"},{"id":6,"state":"RUNNING","worker_id":"10.53.0.139:8083"},{"id":7,"state":"RUNNING","worker_id":"10.53.0.157:8083"},{"id":8,"state":"RUNNING","worker_id":"10.53.0.139:8083"},{"id":9,"state":"RUNNING","worker_id":"10.53.0.157:8083"}],"type":"source"}
    

Gestaffelte Migration

Nachdem Ihr Pub/Sub Lite-Thema zu Kafka migriert wurde, können Sie Ihre Abonnenten und Publisher migrieren. Gehen Sie dazu so vor:

  1. Abonnenten migrieren Aktualisieren Sie Ihre Abonnenten, damit sie Kafka-Themen anstelle von Pub/Sub Lite-Themen verwenden.

    Dies sollte schrittweise in einer kontrollierten Entwicklungsumgebung erfolgen.

    Idealerweise sollten Sie zwei Abonnentengruppen verwalten, um zu prüfen, ob identische Nachrichten von Kafka und Pub/Sub Lite empfangen werden. Sobald das korrekte Verhalten geprüft wurde, können Sie Ihre Pub/Sub Lite-Abonnenten außer Betrieb nehmen.

  2. Publisher migrieren Aktualisieren Sie Ihre Publisher, damit sie direkt in Kafka-Themen und nicht in Pub/Sub Lite-Themen veröffentlichen.

    Ähnlich wie bei der Migration von Abonnenten sollte dies schrittweise in einer kontrollierten Entwicklungsumgebung erfolgen. Wenn duplizierte Daten kein Problem darstellen, können Sie zwei Gruppen von Publishern pflegen, um das Verhalten zu überprüfen. Nachdem Sie das Verhalten geprüft haben, nehmen Sie Ihre Pub/Sub Lite-Publisher außer Betrieb.

  3. Nachdem alle Abonnenten und Publisher migriert wurden, fahren Sie das Migrationstool außer Betrieb. Löschen Sie dazu die Arbeitslast und den Cluster.

  4. Löschen Sie das ursprüngliche Pub/Sub Lite-Thema.

Nächste Schritte