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
- Aktivieren Sie die Google Kubernetes Engine API.
- 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.
- Erstellen Sie ein Google Kubernetes Engine-Dienstkonto.
- Erstellen Sie einen Google Kubernetes Engine-Cluster.
- Passen Sie ein Docker-Image mit den Konfigurationsdetails Ihrer Themen an.
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.
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.
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
)
- Rolle für Managed Kafka-Client (
GKE-Cluster erstellen
In diesem Abschnitt wird beschrieben, wie Sie einen GKE-Cluster erstellen, der das im vorherigen Schritt erstellte Dienstkonto verwendet.
Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.
Klicken Sie auf add_box Erstellen.
Die Seite Autopilot-Cluster erstellen wird angezeigt.
Ändern Sie auf dem Tab Erweiterte Einstellungen das Dienstkonto in das IAM-Dienstkonto, das Sie im vorherigen Schritt erstellt haben.
Konfigurieren Sie bei Bedarf weitere Einstellungen.
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.
- Klonen Sie das GitHub für die Pub/Sub Lite-Migration.
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
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>
Erstellen Sie das Docker-Image, indem Sie die Datei
docker/build-image.sh
ausführen../push-image.sh
Aktualisieren Sie das Bild
docker/push-image.sh
mit dem Namen Ihres Google Cloud-Projekts.Ü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.
- Installieren und konfigurieren Sie kubectl mit dem Authentifizierungs-Plug-in.
- Generieren Sie die kubeconfig für Ihren Google Kubernetes Engine-Cluster.
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
Öffnen Sie die Datei „K8s.yaml“ in einem Texteditor und aktualisieren Sie die folgenden Werte.
- Ersetzen Sie
<workflow_name>
durch den Namen Ihres Kafka Connect-Workflows. - Ersetzen Sie
<gke_service_account>
durch den Namen des Google Kubernetes Engine-Dienstkontos.
- Ersetzen Sie
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.
- Rufen Sie in der Google Cloud Console die Seite Bereitstellungsdetails > Arbeitslast auf.
Klicken Sie auf Ihr Kubernetes-Deployment.
Die Seite mit den Bereitstellungsdetails wird geöffnet.
Klicken Sie unter Dienste verfügbar machen auf Freigeben und fügen Sie dann den Port
8083
hinzu.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 Link
url: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:
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.
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.
Nachdem alle Abonnenten und Publisher migriert wurden, nehmen Sie das Migrationstool außer Betrieb, indem Sie die Arbeitslast und den Cluster löschen.
Löschen Sie das ursprüngliche Pub/Sub Lite-Thema.