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 sur Apache Kafka pour BigQuery.

Avant de commencer

  1. Activez l'API Google Kubernetes Engine.
  2. Identifiez un sujet Pub/Sub Lite à migrer. Choisir 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ées plus loin sur cette page.

  1. Créez un compte de service Google Kubernetes Engine.
  2. Créez un cluster Google Kubernetes Engine.
  3. Personnaliser une image Docker avec la configuration les détails de vos thèmes.
  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 sont utilisés pour souscrire un nouvel abonnement Pub/Sub Lite. 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 les 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 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 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 IAM compte de service que vous avez créé à l'étape précédente.

  4. Configurer d'autres paramètres (facultatif) 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, GitHub, mettez à jour les fichiers suivants avec les fichiers 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 la commande 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. Installer et configurer kubectl par le plug-in d'authentification.
  2. Générez le kubeconfig pour votre cluster Google Kubernetes Engine.
  3. Créer et attribuer 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 compte de service Google Kubernetes Engine. son nom.
  5. Exécutez le fichier K8s.yaml.

    kubectl create -f k8s.yaml
    

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

Surveiller un job

Une fois qu'un job est en cours d'exécution, vous pouvez l'inspecter en vous connectant à Kafka Connect point de terminaison REST.

  1. Dans la console Google Cloud, accédez à la page Informations sur le 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, il répertorie le connecteur en cours d'exécution, Par exemple:

    ["PubSubLiteSourceConnector"]
    

    Par exemple, en consultant ce lien url:8083/connectors/PubSubLiteSourceConnector/status génère une liste de 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 : étapes.

  1. Migrer les abonnés. Mettez à jour vos abonnés pour les utiliser des sujets Kafka au lieu des sujets Pub/Sub Lite.

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

    Idéalement, vous devriez conserver deux ensembles d'abonnés pour vérifier que les messages identiques provenant à la fois de Kafka et de Pub/Sub Lite. Une fois le comportement correct vérifié, vous pouvez mettre hors service votre Pub/Sub Lite abonnés.

  2. Migrer des éditeurs Mettez à jour vos éditeurs pour publier directement sur des sujets Kafka au lieu des sujets Pub/Sub Lite.

    Comme pour la migration des abonnés, vous devez procéder progressivement de développement contrôlé. Si les données en double ne sont pas un problème, peut gérer deux ensembles d'éditeurs pour vérifier le comportement. Après la validation le comportement de vos éditeurs Pub/Sub Lite.

  3. Une fois la migration effectuée pour l'ensemble de vos abonnés et éditeurs, mettez hors service en supprimant la charge de travail et le cluster.

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

Étape suivante