Migrer de Kafka vers Pub/Sub Lite

Ce document est utile si vous envisagez d'effectuer une migration d'applications autogérées d'Apache Kafka vers Pub/Sub Lite.

Présentation de Pub/Sub Lite

Pub/Sub Lite est un service de messagerie à volume élevé conçu pour et un faible coût d'exploitation. Pub/Sub Lite propose des fonctionnalités Stockage et capacité préprovisionnée Dans Pub/Sub Lite, vous pouvez choisir des sujets Lite zonaux ou régionaux. Les sujets Lite régionaux offrent avec le même contrat de niveau de service que les sujets Pub/Sub. Cependant, il existe les différences de fiabilité entre Pub/Sub Pub/Sub Lite en termes de réplication des messages.

Pour en savoir plus sur Pub/Sub et Pub/Sub Lite, consultez la page Qu'est-ce que Pub/Sub ?.

Pour en savoir plus sur les régions et zones disponibles avec Lite, consultez Emplacements Pub/Sub Lite.

Terminologie dans Pub/Sub Lite

Voici quelques termes clés pour Pub/Sub Lite.

  • Message. Données qui transitent par le service Pub/Sub Lite

  • Sujet. Ressource nommée qui représente un flux de messages. Dans sur Pub/Sub Lite, vous pouvez choisir de créer Sujet Lite. Les sujets régionaux Pub/Sub Lite stockent les données deux zones d'une même région. Sujets zonaux Pub/Sub Lite de répliquer des données dans une seule zone.

  • Réservation. Pool nommé de capacité de débit partagé par plusieurs Sujets Lite dans une région.

  • Abonnement : Ressource nommée qui représente un intérêt pour recevoir des messages d'un sujet Lite spécifique. Un abonnement est similaire à un groupe de consommateurs dans Kafka qui ne se connecte qu'à un seul sujet.

  • Abonné. Un client de Pub/Sub Lite qui reçoit des messages d'un sujet Lite et d'un abonnement spécifié. Un abonnement peut avoir plusieurs clients abonnés. Dans ce cas, les messages sont l'équilibrage de charge entre les clients abonnés. Dans Kafka, un abonné s'appelle un consommateur.

  • Éditeur. Une application qui crée des messages et envoie (publie) à un sujet Lite spécifique. Un même thème peut être associé à plusieurs éditeurs. Dans Kafka, un éditeur est appelé "producteur".

Différences entre Kafka et Pub/Sub Lite

Bien que Pub/Sub Lite soit conceptuellement semblable à Kafka, il s'agit d'un système différent, avec une API plus étroite, l'ingestion de données. Bien que les différences soient insignifiantes pour par ingestion et traitement par flux, il existe des cas d'utilisation spécifiques ces différences sont importantes.

Kafka en tant que base de données

Contrairement à Kafka, Pub/Sub Lite n'est actuellement pas compatible publication transactionnelle ou compactage de journaux, bien que l'idempotence soit prise en charge. Ces fonctionnalités sont plus utiles lorsque vous utilisez Kafka comme base de données de messagerie. Si vous utilisez principalement Kafka comme base de données, envisagez d'exécuter votre propre cluster Kafka ou à l'aide d'une solution Kafka gérée telle que Confluent Cloud. Si aucune de ces solutions n'est possible, vous pouvez également envisager d'utiliser une base de données à scaling horizontal telle que Cloud Spanner.

Flux Kafka

Kafka est un système de traitement des données basé sur Kafka. Bien qu'il permette l'injection de clients grand public, il faut accéder à tous les comptes administrateur operations. Kafka Streams utilise également les propriétés de la base de données transactionnelle de Kafka pour stocker des métadonnées internes. Pub/Sub Lite ne peut actuellement pas être utilisé pour les applications de flux Kafka.

Apache Beam est un système similaire de traitement de flux de données qui est intégré à Kafka, Pub/Sub et Pub/Sub Lite. Vous pouvez exécuter des pipelines Beam de manière entièrement gérée avec Dataflow, ou sur vos fichiers Apache Flink et Apache Spark.

Surveiller

Les clients Kafka peuvent lire les métriques côté serveur. Dans Pub/Sub Lite, les métriques pertinentes sur le comportement des éditeurs et des abonnés sont gérées via Cloud Monitoring sans configuration supplémentaire.

Gestion de la capacité

La capacité d'un sujet Kafka est déterminée par la capacité du cluster. Les paramètres de réplication, de compactage de clé et de traitement par lot déterminent la capacité requise pour desservir un sujet donné sur le cluster Kafka. Le débit d'une instance Kafka est limité par la capacité des machines sur lesquelles les courtiers sont en cours d'exécution. En revanche, vous devez définir à la fois le stockage et le débit pour un sujet Pub/Sub Lite. La capacité de stockage de Pub/Sub Lite propriété configurable du sujet. La capacité de débit est basée sur la capacité de l'instance reservation et limites inhérentes ou configurées par partition.

Authentification et sécurité

Apache Kafka prend en charge plusieurs mécanismes ouverts d'authentification et de chiffrement. Avec Pub/Sub Lite, l'authentification est basée sur Système IAM. Sécurité assurée grâce au chiffrement au repos et en transit. Pour en savoir plus sur l'authentification Pub/Sub Lite, consultez le Section du workflow de migration, plus loin dans ce document.

Mapper les propriétés Kafka sur les propriétés Pub/Sub Lite

Kafka dispose de nombreuses options de configuration qui contrôlent la structure des sujets, les limites et les propriétés de courtier. Voici quelques fonctionnalités courantes utiles pour l'ingestion de données qui sont abordés dans cette section, avec leurs équivalents Pub/Sub Lite. Pub/Sub Lite vous n'avez pas à vous soucier de nombreuses propriétés de courtier.

Propriétés de configuration du sujet

Propriété Kafka Propriété Pub/Sub Lite Description
retention.bytes Stockage par partition Toutes les partitions d'un sujet Lite ont la même capacité de stockage configurée. La capacité de stockage totale d'un sujet Lite correspond à la somme de la capacité de stockage de toutes les partitions du sujet.
retention.ms Durée de conservation des messages Durée maximale pendant laquelle un sujet Lite stocke les messages. Si vous ne spécifiez pas de durée de conservation des messages, le sujet Lite les stocke jusqu'à ce que vous dépassiez la capacité de stockage.
flush.ms et acks Non configurable dans Pub/Sub Lite Les utilisateurs publiés ne sont pas confirmés tant qu'ils ne sont pas garantis comme étant conservés dans l'espace de stockage répliqué.
max.message.bytes Non configurable dans Pub/Sub Lite La taille maximale des messages pouvant être envoyés à Pub/Sub Lite est de 3,5 Mio. Les tailles de message sont calculées de manière reproductible.
message.timestamp.type Non configurable dans Pub/Sub Lite Lorsque vous utilisez l'implémentation consommateur, le code temporel de l'événement est choisi s'il est présent, ou le code temporel de publication est utilisé à la place. Les codes temporels de publication et d'événement sont disponibles lorsque vous utilisez Beam.

Pour en savoir plus sur les propriétés du sujet Lite, consultez la section Propriétés d'un sujet Lite.

Propriétés de configuration du producteur

Pub/Sub Lite est compatible avec Protocole du fil du producteur. Certaines propriétés modifient le comportement des bibliothèques clientes Cloud producteurs. certaines des plus courantes sont présentées dans le tableau suivant.

Propriété Kafka Propriété Pub/Sub Lite Description
auto.create.topics.enable Non configurable dans Pub/Sub Lite Créez un sujet et un abonnement qui sont à peu près équivalents à un groupe grand public pour un seul sujet dans Pub/Sub Lite. Vous pouvez utiliser la console, gcloud CLI, l'API ou les bibliothèques clientes Cloud.
key.serializer et value.serializer Non configurable dans Pub/Sub Lite

Obligatoire lors de l'utilisation de Kafka Producer ou d'une bibliothèque équivalente qui communique via le protocole filaire.

batch.size Compatible avec Pub/Sub Lite Le traitement par lot est pris en charge. Pour des performances optimales, nous recommandons une valeur de 10 Mio pour cette valeur.
linger.ms Compatible avec Pub/Sub Lite Le traitement par lot est pris en charge. Pour des performances optimales, nous recommandons une valeur de 50 ms.
max.request.size Compatible avec Pub/Sub Lite Le serveur impose une limite de 20 Mio par lot. Définissez cette valeur sur moins de 20 Mio dans votre client Kafka.
enable.idempotence Compatible avec Pub/Sub Lite
compression.type Non disponible dans Pub/Sub Lite Vous devez définir explicitement cette valeur sur none.

Propriétés de configuration du consommateur

Pub/Sub Lite est compatible avec Protocole filaire consommateur : Certaines propriétés modifient le comportement des bibliothèques clientes Cloud grand public. certaines des plus courantes sont présentées dans le tableau suivant.

Propriété Kafka Description
key.deserializer et value.deserializer

Obligatoire lors de l'utilisation du consommateur Kafka ou d'une bibliothèque équivalente qui communique via le protocole filaire.

auto.offset.reset Cette configuration n'est pas compatible ou nécessaire. Une fois créés, les abonnements disposent d'un emplacement de décalage défini.
message.timestamp.type Le code temporel de publication est toujours disponible à partir de Pub/Sub Lite et ne diminue pas pour chaque partition. Les codes temporels des événements peuvent être présents ou non selon qu'ils ont été joints au message lors de sa publication. Les codes temporels de publication et d'événement sont disponibles simultanément lorsque vous utilisez Dataflow.
max.partition.fetch.bytes, max.poll.records Impose une limite flexible au nombre d'enregistrements et d'octets renvoyés par les appels poll() et au nombre d'octets renvoyés par les requêtes de récupération internes. La valeur par défaut de "max.partition.fetch.bytes" pour "1 Mio" peut limiter le débit de votre client. Pensez à augmenter cette valeur.

Comparer les fonctionnalités de Kafka et de Pub/Sub Lite

Le tableau suivant compare les fonctionnalités d'Apache Kafka avec celles de Pub/Sub Lite:

Fonctionnalité Kafka Pub/Sub Lite
Tri des messages Oui Oui
Déduplication des messages Oui Oui avec Dataflow
Abonnements Push Non Oui via l'exportation Pub/Sub
Transactions Oui Non
Stockage des messages Limitée par l'espace de stockage disponible sur la machine Illimité
Relecture des messages Oui Oui
Journalisation et surveillance Autogéré Automatisation avec Cloud Monitoring
Traitement par flux Oui avec Kafka Streams, Apache Beam ou Dataproc. Oui avec Beam ou Dataproc.

Le tableau suivant compare les fonctionnalités auto-hébergées avec Kafka et celles gérées par Google avec Pub/Sub Lite:

Fonctionnalité Kafka Pub/Sub Lite
Disponibilité Déployez manuellement Kafka sur des emplacements supplémentaires. Déployé dans le monde entier. Consultez la liste des zones géographiques.
Reprise après sinistre Concevez et gérez vos propres sauvegardes et réplications. Géré par Google.
Gestion des infrastructures Déployez et exploitez manuellement des machines virtuelles (VM) ou des machines. Assurez une gestion des versions et des correctifs cohérents. Géré par Google.
Planification des capacités Planifiez manuellement vos besoins de stockage et de calcul à l'avance. Géré par Google. Vous pouvez augmenter les capacités de calcul et de stockage à tout moment.
Assistance Aucun Personnel d'astreinte et assistance disponibles 24h/24.

Comparaison des coûts de Kafka et de Pub/Sub Lite

La manière dont vous estimez et gérez les coûts dans Pub/Sub Lite est différente de celle de Kafka. Les coûts d'un cluster Kafka sur site ou dans incluent le coût des machines, des disques, de la mise en réseau, des messages entrants et des messages. Il inclut également les frais généraux liés à la gestion et à la maintenance de ces systèmes et leur infrastructure associée. Lorsque vous gérez un cluster Kafka, vous devez mettre à niveau manuellement les machines, planifier la capacité du cluster mettre en place une reprise après sinistre qui comprend une planification et des tests approfondis. Vous devez regrouper ces différents coûts pour déterminer coût total de possession (TCO).

Les tarifs de Pub/Sub Lite incluent le coût de la réservation. (octets publiés, octets abonnés, octets gérés par le proxy Kafka) et le coût du stockage provisionné. Vous payez uniquement pour les ressources en plus des frais liés aux messages sortants. Vous pouvez utiliser simulateur de coût pour estimer vos coûts.

Workflow de migration

Pour migrer un sujet d'un cluster Kafka vers Pub/Sub Lite, suivez les instructions ci-dessous.

Configurer les ressources Pub/Sub Lite

  1. Créer une application Pub/Sub Lite reservation pour le débit attendu pour tous les sujets que vous migrez.

    Utiliser Pub/Sub Lite simulateur de coût pour calculer le total cumulé les métriques de débit de vos sujets Kafka existants. Pour en savoir plus, sur la création de réservations, consultez la page Créer et gérer des réservations Lite.

  2. Créer un sujet Pub/Sub Lite pour chaque sujet correspondant dans Kafka.

    Pour en savoir plus sur la création de sujets Lite, consultez Créer et gérer des sujets Lite.

  3. Créer un abonnement Pub/Sub Lite pour chaque abonnement dans le cluster Kafka.

    Par exemple, pour un groupe de consommateurs nommé consumers qui utilise topic-a et topic-b, vous devez créer un abonnement consumers-a est associé à topic-a et un abonnement consumers-b est associé à topic-b. Pour en savoir plus sur la création d'abonnements, consultez Créer et gérer des abonnements Lite.

S'authentifier auprès de Pub/Sub Lite

En fonction du type de votre client Kafka, choisissez l'une des méthodes suivantes:

Clients Kafka basés sur Java version 3.1.0 ou ultérieure avec recompilation

Pour les clients Java 3.1.0 ou version ultérieure de Kafka pouvant être recompilés sur l'instance sur laquelle vous exécutez le client Kafka:

  1. Installez le package com.google.cloud:pubsublite-kafka-auth.

  2. d'obtenir les paramètres nécessaires à l'authentification et Pub/Sub Lite com.google.cloud.pubsublite.kafka.ClientParameters.getParams

    La méthode getParams() (consultez exemple de code ) initialise les éléments suivants : JAAS et SASL de configuration en tant que paramètres pour s'authentifier Pub/Sub Lite:

    security.protocol=SASL_SSL
    sasl.mechanism=OAUTHBEARER
    sasl.oauthbearer.token.endpoint.url=http://localhost:14293
    sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.secured.OAuthBearerLoginCallbackHandler
    

Clients Kafka basés sur Java qui exécutent la version 3.1.0 ou ultérieure sans recompiler

Pour les clients Kafka compatibles avec KIP-768, nous acceptons l'authentification OAUTHBEARER à configuration uniquement qui utilise un script side-car Python. Ces versions incluent la version de janvier 2022 Java version 3.1.0 ou ultérieure.

Procédez comme suit sur l'instance sur laquelle vous exécutez votre client Kafka:

  1. Installez Python 3.6 ou version ultérieure.

    Consultez la page Installer Python.

  2. Installez le package d'authentification Google: pip install google-auth

    Cette bibliothèque simplifie les différentes authentifications de serveur à serveur des mécanismes d'accès aux API Google. Consultez le Page google-auth.

  3. Exécutez le script kafka_gcp_credentials.py.

    Ce script démarre un serveur HTTP local et récupère les identifiants Google Cloud par défaut dans l'environnement en utilisant google.auth.default()

    Le compte principal indiqué dans les identifiants récupérés doit avoir l'pubsublite.locations.openKafkaStream l'autorisation pour le projet Google Cloud que vous utilisez et l'emplacement que vous connectez. Éditeur Pub/Sub Lite (roles/pubsublite.publisher) et abonné Pub/Sub Lite (roles/pubsublite.subscriber) rôles comportent ce rôle autorisation requise. Ajoutez ces rôles à votre principal :

    Les identifiants sont utilisés Authentification SASL/OAUTHBEARER pour le client Kafka.

    Les paramètres suivants sont obligatoires dans vos propriétés pour s'authentifier auprès de Pub/Sub Lite à partir du client Kafka:

    security.protocol=SASL_SSL
    sasl.mechanism=OAUTHBEARER
    sasl.oauthbearer.token.endpoint.url=localhost:14293
    sasl.login.callback.handler.class=org.apache.kafka.common.security.oauthbearer.secured.OAuthBearerLoginCallbackHandler
    sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule \
      required clientId="unused" clientSecret="unused" \
      extension_pubsubProject="PROJECT_ID";
    

    Remplacez PROJECT_ID par l'ID de votre projet exécutant Pub/Sub Lite.

Tous les autres clients sans reconstruction

Pour tous les autres clients, procédez comme suit:

  1. Téléchargez un fichier JSON contenant une clé de compte de service. pour le compte de service que vous prévoyez d'utiliser pour votre client.

  2. Encodez le fichier de compte de service à l'aide de l'encodage base64 à utiliser comme d'authentification unique.

    Sur les systèmes Linux ou macOS, vous pouvez utiliser la commande base64 (souvent installé par défaut) comme suit:

    base64 < my_service_account.json > password.txt
    

    Vous pouvez utiliser le contenu du fichier de mot de passe pour l'authentification avec les paramètres suivants.

    Java

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
     username="PROJECT_ID" \
     password="contents of base64 encoded password file";
    

    Remplacez PROJECT_ID par l'ID de votre projet exécutant Pub/Sub.

    Librdkafka

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.username=PROJECT_ID
    sasl.password=contents of base64 encoded password file
    

    Remplacez PROJECT_ID par l'ID de votre projet exécutant Pub/Sub.

Cloner des données avec Kafka Connect

L'équipe Pub/Sub Lite gère l'implémentation d'une Récepteur Kafka Connect. Vous pouvez configurer cette implémentation pour copier les données d'un sujet Kafka vers un sujet Pub/Sub Lite à l'aide d'une Cluster Kafka Connect.

Pour configurer le connecteur afin qu'il effectue la copie de données, consultez Connecteur Kafka du groupe Pub/Sub.

Si vous souhaitez vous assurer que l'affinité de partition n'est pas affectée par la migration assurez-vous que le sujet kafka et le sujet Pub/Sub Lite disposent du le même nombre de partitions, et que le paramètre pubsublite.ordering.mode est définie sur KAFKA. Le connecteur achemine alors les messages la partition Pub/Sub Lite avec le même index que la partition kafka. sur lesquels elles ont été publiées à l'origine.

Migrer les clients

Le modèle de ressources de Pub/Sub Lite est différent de celui de Kafka. et plus particulièrement, contrairement à un groupe de consommateurs, un abonnement est une ressource explicite associées à un seul sujet. En raison de cette différence, tout emplacement API consommateur Kafka qui nécessite la transmission d'un topic, l'abonnement complet doit être transmis à la place.

En plus des configurations SASL pour le client Kafka, Les paramètres suivants sont également requis lorsque vous utilisez l'API Consumer Kafka pour : avec Pub/Sub Lite.

bootstrap.servers=REGION-kafka-pubsub.googleapis.com:443
group.id=unused

Remplacez REGION par la région dans laquelle se trouve votre abonnement Pub/Sub Lite.

Avant de démarrer la première tâche consommateur Pub/Sub Lite pour une tâche donnée vous pouvez lancer (sans attendre) une l'opération de recherche administrateur permettant de définir l'emplacement initial de vos clients.

Lorsque vous démarrez vos clients, ils se reconnectent au décalage actuel le nombre de messages en attente. Exécutez à la fois l'ancienne et la de nouveaux clients en parallèle, tant qu'il faut vérifier leur comportement, puis de refuser les anciens clients grand public.

Migrer des producteurs

En plus des configurations SASL pour le client Kafka, Le code suivant est également requis en tant que paramètre "producteur" lorsque vous utilisez la classe l'API Kafka Producer pour interagir avec Pub/Sub Lite.

bootstrap.servers=REGION-kafka-pubsub.googleapis.com:443

Remplacez REGION par la région où se trouve votre sujet Pub/Sub Lite.

Après avoir migré tous les clients du sujet pour lire depuis Pub/Sub Lite, transférez le trafic de votre producteur Pub/Sub Lite directement.

Migrer progressivement les clients du producteur pour qu'ils écrivent dans le sujet Pub/Sub Lite au lieu du sujet Kafka.

Redémarrez les clients du producteur pour récupérer les nouvelles configurations.

Baisser Kafka Connect

Après avoir migré tous les producteurs dans lesquels écrire Pub/Sub Lite directement, le connecteur ne copie plus de données.

Vous pouvez désactiver l'instance Kafka Connect.

Résoudre les problèmes de connexion Kafka

Étant donné que les clients de Kafka communiquent via un protocole filaire sur mesure, nous ne pouvons pas fournir de messages d'erreur pour les échecs de toutes les requêtes. Appuyez-vous sur les codes d'erreur envoyés dans le message.

Vous pouvez obtenir plus de détails sur les erreurs qui se produisent dans le client en Définissez le niveau de journalisation du préfixe org.apache.kafka sur FINEST.

Faible débit et augmentation du nombre de tâches en attente

Plusieurs raisons peuvent expliquer un débit faible et une augmentation du nombre de tâches en attente. Cela peut être dû à une capacité insuffisante.

Vous pouvez configurer la capacité de débit au niveau du sujet à l'aide des réservations. Si la capacité de débit est insuffisante pour l'abonnement de publication est configurée, le débit correspondant l'abonnement et la publication sont limités.

Cette erreur de débit est signalée par le Métrique topic/flow_control_status pour les éditeurs, et subscription/flow_control_status pour les abonnés. La métrique fournit les états suivants:

  • NO_PARTITION_CAPACITY: ce message indique que la répartition par partition limite de débit atteinte.

  • NO_RESERVATION_CAPACITY: ce message indique que le coût par réservation limite de débit atteinte.

Vous pouvez afficher les graphiques d'utilisation du sujet ou de la réservation. de publication et d'abonnement et vérifiez si l'utilisation est proche de 100%.

Pour résoudre ce problème, augmentez la valeur capacité de débit le sujet ou la réservation.

Message d'erreur "Échec de l'autorisation du sujet"

La publication à l'aide de l'API Kafka nécessite que l'agent de service Lite dispose du pour publier dans le sujet Pub/Sub Lite.

L'erreur TOPIC_AUTHORIZATION_FAILED s'affiche dans votre client au niveau de l'événement que vous ne disposez pas des autorisations de publication nécessaires un sujet Pub/Sub Lite.

Pour résoudre le problème, vérifiez si l'agent de service Lite du projet a réussi dans la configuration d'authentification.

Message d'erreur concernant le sujet non valide

S'abonner à l'aide de l'API Kafka nécessite de transmettre le chemin d'accès complet de l'abonnement tous les emplacements où un topic est attendu dans l'API Consumer Kafka.

L'erreur INVALID_TOPIC_EXCEPTION s'affiche dans votre client grand public si vous ne transmettre un chemin d'abonnement correctement formaté.

Requête non valide lorsque vous n'utilisez pas de réservations

L'utilisation du protocole filaire Kafka nécessite que tous les sujets soient associés réservation afin de facturer l'utilisation.