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 Ein Thema zu Apache Kafka für BigQuery

Hinweise

  1. Aktivieren Sie die Google Kubernetes Engine API.
  2. Bestimmen Sie ein zu migrierendes Pub/Sub Lite-Thema. Entscheiden Sie sich für einen Namen das Zielthema in Apache Kafka für BigQuery. 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 werden weiter unten auf dieser Seite angezeigt.

  1. Erstellen Sie ein Google Kubernetes Engine-Dienstkonto.
  2. Erstellen Sie einen Google Kubernetes Engine-Cluster.
  3. Docker-Image mit der Konfiguration anpassen Details zu Ihren Themen.
  4. Stellen Sie das Docker-Image in einem Google Kubernetes Engine-Cluster bereit.

    Im Bild: Kafka Connect und das Pub/Sub Lite-Plug-in für Kafka „Connect“ wird verwendet, um ein neues Pub/Sub Lite-Abo zu abonnieren. in Apache Kafka für BigQuery 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.

  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 den Migrationsprozess erleichtern.

    • 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 den Dienst verwendet Konto, das Sie im vorherigen Schritt erstellt haben.

  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 zu IAM Dienstkonto, das Sie im vorherigen Schritt erstellt haben.

  4. Optional: Konfigurieren Sie weitere Einstellungen. nach Bedarf.

  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 erstellen und anpassen zu Ihrem Thema.

  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. In den Secrets-Dateien im GitHub-Repository zu erstellen, aktualisieren Sie die folgenden Dateien mit den entsprechenden Informationen zum Verknüpfen des Repositorys mit Ihrem Google Cloud-Projekt, Pub/Sub Lite und Kafka.

    .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 den Befehl docker/push-image.sh aus, um das Image per Push an Artifact Registry zu übertragen -Datei.

    ./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.

  1. Installieren und konfigurieren kubectl mit das Authentifizierungs-Plug-in.
  2. Generieren Sie die kubeconfig für Ihren Google Kubernetes Engine-Cluster.
  3. Google Kubernetes Engine-Dienstkonto mit den richtigen Berechtigungen erstellen und gewähren 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 das Google Kubernetes Engine-Dienstkonto. Namen.
  5. Führen Sie die Datei K8s.yaml aus.

    kubectl create -f k8s.yaml
    

    Dadurch wird eine Kafka Connect-Arbeitslast erstellt, die in Ihrer Google Kubernetes Engine ausgeführt wird und startet den Pub/Sub Lite-Connector, um Daten Pub/Sub Lite-Thema für Apache Kafka für BigQuery

Jobs überwachen

Sobald ein Job ausgeführt wird, können Sie ihn überprüfen, indem Sie eine Verbindung zu Kafka Connect herstellen REST-Endpunkt.

  1. Gehen Sie in der Google Cloud Console zu Bereitstellungsdetails > Seite „Arbeitslast“.
  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 beim Einrichten der Portweiterleitung erhalten, gibt wieder Die Ausgabe sollte in etwa so aussehen:

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

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

    ["PubSubLiteSourceConnector"]
    

    Wenn Sie z. B. diesen Link prüfen, url:8083/connectors/PubSubLiteSourceConnector/status liefert eine Liste mit Aufgaben. und ihren 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"}
    

Migration in Phasen

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

  1. Abonnenten migrieren Abonnenten für die Nutzung aktualisieren Kafka-Themen anstelle von Pub/Sub Lite-Themen.

    Dies sollte schrittweise in einer kontrollierten Entwicklungsumgebung erfolgen.

    Idealerweise sollten Sie zwei Gruppen von Abonnenten unterhalten, um zu überprüfen, ob identische Nachrichten von Kafka und Pub/Sub Lite empfangen werden. Sobald das richtige Verhalten geprüft wurde, können Sie Pub/Sub Lite außer Betrieb nehmen Abonnenten.

  2. Publisher migrieren Aktualisieren Sie Ihre Publisher für die direkte Veröffentlichung auf Kafka-Themen anstelle von Pub/Sub Lite-Themen.

    Ähnlich wie bei der Migration von Abonnenten sollte dies schrittweise in einem kontrollierten Entwicklungsumgebung. Wenn duplizierte Daten kein Problem darstellen, zwei Publisher-Gruppen verwalten können, um das Verhalten zu überprüfen. Nach der Bestätigung die Pub/Sub Lite-Publisher außer Betrieb nehmen.

  3. Nachdem alle Abonnenten und Publisher migriert wurden, nehmen Sie das Migrationstool durch Löschen der Arbeitslast und des Clusters.

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

Nächste Schritte