Migrer de Pub/Sub Lite vers Apache Kafka pour BigQuery

Ce document explique en détail comment migrer des données d'un sujet Pub/Sub Lite vers un sujet Apache Kafka pour BigQuery.

Avant de commencer

  1. Activez l'API Google Kubernetes Engine.
  2. Identifiez un sujet Pub/Sub Lite à migrer. Choisissez un nom pour le sujet cible dans Apache Kafka pour BigQuery. Déterminez également vers quel cluster Apache Kafka pour BigQuery vous migrez.

Workflow de migration

Pour migrer vos données, vous devez effectuer les tâches suivantes. Les détails spécifiques de ces tâches sont présentés plus loin sur cette page.

  1. Créez un compte de service Google Kubernetes Engine.
  2. Créez un cluster Google Kubernetes Engine.
  3. Personnalisez une image Docker avec les détails de configuration de vos sujets.
  4. Déployez l'image Docker sur un cluster Google Kubernetes Engine.

    Dans l'image, Kafka Connect et le plug-in Pub/Sub Lite pour Kafka Connect permettent de souscrire un nouvel abonnement Pub/Sub Lite et de publier sur Apache Kafka pour BigQuery.

Créer un compte de service Google Kubernetes Engine

Cette section explique comment créer un compte de service IAM disposant des autorisations requises pour exécuter un cluster Google Kubernetes Engine.

  1. Dans la console Google Cloud, créez un compte de service IAM avec les autorisations minimales requises pour utiliser Google Kubernetes Engine.

  2. Attribuez les rôles IAM supplémentaires suivants au compte de service. Ces rôles facilitent le processus de migration.

    • Rôle client Kafka géré (roles/managedkafka.client)
    • Rôle d'abonné Pub/Sub Lite (roles/pubsublite.subscriber)
    • Rôle de lecteur Pub/Sub Lite (roles/pubsublite.Viewer)
    • Rôle de lecteur Artifact Registry (roles/artifactregistry.reader)

Créer un cluster GKE

Cette section explique comment créer un cluster GKE qui utilise le compte de service que vous avez créé à l'étape précédente.

  1. Accédez à la page Google Kubernetes Engine dans Google Cloud Console.

    Accéder à Google Kubernetes Engine

  2. Cliquez sur Créer.

    La page Créer un cluster Autopilot s'affiche.

  3. Dans l'onglet Paramètres avancés, remplacez le compte de service par le compte de service IAM que vous avez créé à l'étape précédente.

  4. Si nécessaire, configurez d'autres paramètres si nécessaire.

  5. Pour créer le cluster, cliquez sur Créer.

Créer une image Docker Kafka Connect

Cette section explique comment créer et personnaliser une image Docker Kafka Connect pour votre sujet.

  1. Clonez le dépôt GitHub pour la migration de Pub/Sub Lite.
  2. Pour le compte de service IAM que vous avez créé précédemment, générez une clé de compte JSON.

    Utilisez un outil base64 pour encoder la clé JSON. Par exemple,

    Linux

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

    Mac

    base64 < account_key_json > password.txt
    
  3. Dans les fichiers de secrets du dépôt GitHub, mettez à jour les fichiers suivants avec les informations appropriées pour associer le dépôt à votre projet Google Cloud, Pub/Sub Lite et 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. Créez l'image Docker en exécutant le fichier docker/build-image.sh.

    ./push-image.sh
    
  5. Mettez à jour l'image docker/push-image.sh avec le nom de votre projet Google Cloud.

  6. Transférez l'image vers Artifact Registry en exécutant le fichier docker/push-image.sh.

    ./push-image.sh
    

Déployer une charge de travail Kafka Connect

Cette section explique comment déployer l'image Docker Kafka Connect sur un cluster Google Kubernetes Engine.

  1. Installez et configurez kubectl avec le plug-in d'authentification.
  2. Générez le fichier kubeconfig pour votre cluster Google Kubernetes Engine.
  3. Créez et accordez un compte de service Google Kubernetes Engine avec les autorisations appropriées pour emprunter l'identité de votre compte IAM.

    $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. Ouvrez le fichier K8s.yaml dans un éditeur de texte et mettez à jour les valeurs suivantes.

    1. Remplacez <workflow_name> par le nom de votre workflow Kafka Connect.
    2. Remplacez <gke_service_account> par le nom du compte de service Google Kubernetes Engine.
  5. Exécutez le fichier K8s.yaml.

    kubectl create -f k8s.yaml
    

    Cette opération crée une charge de travail Kafka Connect qui s'exécute dans votre cluster Google Kubernetes Engine et lance le connecteur Pub/Sub Lite pour déplacer les données de votre sujet Pub/Sub Lite vers Apache Kafka pour BigQuery.

Surveiller un job

Une fois qu'une tâche est en cours d'exécution, vous pouvez l'inspecter en vous connectant au point de terminaison REST Kafka Connect.

  1. Dans la console Google Cloud, accédez à la page Détails du déploiement > Charge de travail.
  2. Cliquez sur votre déploiement Kubernetes.

    La page d'informations sur le déploiement s'ouvre.

  3. Sous Exposing services (Exposer les services), cliquez sur Expose (Exposer), puis ajoutez le port 8083.

  4. Activez le transfert de port.

    Le lien par défaut que vous obtenez en configurant le transfert de port renvoie un résultat semblable à celui-ci:

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

    Si vous ajoutez /connectors au lien, le connecteur en cours d'exécution est affiché. Par exemple:

    ["PubSubLiteSourceConnector"]
    

    Par exemple, la vérification du lien url:8083/connectors/PubSubLiteSourceConnector/status affiche la liste des tâches et leur état.

    {"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 par étapes

Une fois votre sujet Pub/Sub Lite migré vers Kafka, vous pouvez migrer vos abonnés et vos éditeurs. Pour ce faire, procédez comme suit.

  1. Migrer les abonnés. Mettez à jour vos abonnés pour qu'ils utilisent des sujets Kafka plutôt que des sujets Pub/Sub Lite.

    Cette opération doit être effectuée progressivement dans un environnement de développement contrôlé.

    Idéalement, vous devez conserver deux ensembles d'abonnés pour vérifier que des messages identiques sont reçus à la fois de Kafka et de Pub/Sub Lite. Une fois le comportement correct vérifié, vous pouvez mettre vos abonnés Pub/Sub Lite hors service.

  2. Migrer des éditeurs Mettez à jour vos éditeurs pour publier directement dans des sujets Kafka plutôt que dans des sujets Pub/Sub Lite.

    Comme pour la migration des abonnés, cette opération doit être effectuée progressivement dans un environnement de développement contrôlé. Si le problème n'est pas lié aux données en double, vous pouvez gérer deux ensembles d'éditeurs pour vérifier le comportement. Après avoir vérifié le comportement, mettez hors service vos éditeurs Pub/Sub Lite.

  3. Une fois tous vos abonnés et éditeurs migrés, mettez l'outil de migration hors service en supprimant la charge de travail et le cluster.

  4. Supprimez le sujet Pub/Sub Lite d'origine.

Étapes suivantes