Von Pub/Sub Lite zu Managed Service for Apache Kafka in Google Cloud migrieren

In diesem Dokument wird beschrieben, wie Sie Daten aus einem Pub/Sub Lite-Thema in ein Thema für Managed Service for Apache Kafka migrieren.

Hinweise

  1. Aktivieren Sie die Google Kubernetes Engine API.
  2. Wählen Sie ein Pub/Sub Lite-Thema aus, das Sie migrieren möchten. Legen Sie einen Namen für das Zielthema in Managed Service for Apache Kafka in Google Cloud fest. Legen Sie auch fest, zu welchem Managed Service for Apache Kafka-Cluster Sie migrieren.

Migrationsablauf

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

  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. Bereitstellen Sie das Docker-Image in einem Google Kubernetes Engine-Cluster.

    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 Managed Service for Apache Kafka zu veröffentlichen.

Google Kubernetes Engine-Dienstkonto erstellen

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

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

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

    • Rolle für Managed Kafka-Client (roles/managedkafka.client)
    • Pub/Sub Lite-Abonnentenrolle (roles/pubsublite.subscriber)
    • Pub/Sub Lite-Betrachterrolle (roles/pubsublite.Viewer)
    • Rolle „Artifact Registry-Leser“ (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. Konfigurieren Sie bei Bedarf weitere Einstellungen.

  5. Klicken Sie auf Erstellen, um den Cluster zu erstellen.

Docker-Image für Kafka Connect 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 für die Pub/Sub Lite-Migration.
  2. Erstellen Sie einen JSON-Kontoschlüssel für das zuvor erstellte IAM-Dienstkonto.

    Codieren Sie den JSON-Schlüssel mit einem Base64-Tool. 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 Bild docker/push-image.sh mit dem Namen Ihres Google Cloud-Projekts.

  6. Übertragen Sie das Image per Push in Artifact Registry, indem Sie die Datei docker/push-image.sh ausführen.

    ./push-image.sh
    

Kafka Connect-Arbeitslast bereitstellen

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

  1. Installieren und konfigurieren Sie kubectl mit dem Authentifizierungs-Plug-in.
  2. Generieren Sie die kubeconfig für Ihren Google Kubernetes Engine-Cluster.
  3. Erstellen Sie ein Google Kubernetes Engine-Dienstkonto und gewähren Sie ihm die richtigen 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 in den verwalteten Google Cloud-Dienst für Apache Kafka zu verschieben.

Job überwachen

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

  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 den Port 8083 hinzu.

  4. Aktivieren Sie die Portweiterleitung.

    Der Standardlink, den Sie beim Einrichten der Portweiterleitung erhalten, gibt eine Ausgabe zurück, die in etwa so aussieht:

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

    Wenn Sie dem Link das /connectors anhängen, wird der ausgeführte Connector aufgeführt. Beispiel:

    ["PubSubLiteSourceConnector"]
    

    Wenn Sie beispielsweise diesen Linkurl:8083/connectors/PubSubLiteSourceConnector/status anklicken, wird eine Liste mit Aufgaben und deren Status angezeigt.

    {"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"}
    

Stufenweise 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 statt Pub/Sub Lite-Themen nutzen.

    Dies sollte schrittweise in einer kontrollierten Entwicklungsumgebung erfolgen.

    Idealerweise sollten Sie zwei Abonnentengruppen verwalten, um zu prüfen, ob identische Nachrichten sowohl von Kafka als auch von Pub/Sub Lite empfangen werden. Sobald das korrekte Verhalten bestätigt wurde, können Sie Ihre Pub/Sub Lite-Abonnenten außer Betrieb setzen.

  2. Publisher migrieren Aktualisieren Sie Ihre Publisher, damit sie direkt in Kafka-Themen statt 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 Publisher verwenden, um das Verhalten zu überprüfen. Nachdem du das Verhalten überprüft hast, solltest du deine Pub/Sub Lite-Publisher außer Betrieb setzen.

  3. Nachdem alle Abonnenten und Publisher migriert wurden, nehmen Sie das Migrationstool außer Betrieb, indem Sie die Arbeitslast und den Cluster löschen.

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

Nächste Schritte