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

In diesem Dokument wird beschrieben, wie Sie Daten von einem Pub/Sub Lite-Thema zu Ein Thema zu Managed Service for Apache Kafka

Hinweis

  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 Google Cloud Managed Service for Apache Kafka fest. Bestimmen Sie außerdem, zu welchem verwalteten Dienst für 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. 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 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 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 für die Ausführung der 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-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 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. Konfigurieren Sie bei Bedarf weitere Einstellungen.

  5. Klicken Sie auf Erstellen, um den Cluster zu 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. 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 Image 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. 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 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 Ihrer Google Kubernetes Engine ausgeführt wird und startet den Pub/Sub Lite-Connector, um Daten Pub/Sub Lite-Thema für Google Cloud Managed Service for Apache Kafka

Jobs ü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 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 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"}
    

Migration in Phasen

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

  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 Gruppen von Abonnenten unterhalten, um zu überprüfen, ob identische Nachrichten von Kafka und 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 einem kontrollierten Entwicklungsumgebung. 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 durch Löschen der Arbeitslast und des Clusters.

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

Nächste Schritte