Migrer de Kafka vers Pub/Sub Lite

Ce document est utile si vous envisagez de migrer d'Apache Kafka autogéré vers Pub/Sub Lite.

Présentation de Pub/Sub Lite

Pub/Sub Lite est un service de messagerie à volume élevé conçu pour un coût de fonctionnement faible. Pub/Sub Lite propose un stockage zonal et régional, ainsi qu'une capacité préprovisionnée. Dans Pub/Sub Lite, vous pouvez choisir des sujets Lite zonaux ou régionaux. Les sujets Lite régionaux offrent le même contrat de niveau de service de disponibilité que les sujets Pub/Sub. Toutefois, il existe des différences de fiabilité entre Pub/Sub et Pub/Sub Lite en termes de réplication de 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 compatibles avec Lite, consultez la section Emplacements Pub/Sub Lite.

Terminologie dans Pub/Sub Lite

Vous trouverez ci-dessous quelques termes clés pour Pub/Sub Lite.

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

  • Thème Ressource nommée qui représente un flux de messages Dans Pub/Sub Lite, vous pouvez choisir de créer un sujet Lite zonal ou régional. Les sujets régionaux Pub/Sub Lite stockent les données dans deux zones d'une même région. Les sujets zonaux Pub/Sub Lite répliquent les 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 à recevoir des messages d'un sujet Lite particulier. Un abonnement est semblable à un groupe de consommateurs dans Kafka qui ne se connecte qu'à un seul sujet.

  • Abonné Client de Pub/Sub Lite qui reçoit des messages d'un sujet Lite et sur un abonnement spécifié Un abonnement peut avoir plusieurs clients abonnés. Dans ce cas, la charge des messages est équilibrée entre les clients abonnés. Dans Kafka, un abonné est appelé consommateur.

  • Éditeur Application qui crée des messages et les envoie (publie) dans un sujet Lite spécifique. Un sujet peut avoir plusieurs éditeurs. Dans Kafka, un éditeur est appelé "producteur".

Différences entre Kafka et Pub/Sub Lite

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

Kafka en tant que base de données

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

Flux Kafka

Kafka Streams est un système de traitement des données basé sur Kafka. Bien qu'il permette l'injection de clients consommateurs, il nécessite un accès à toutes les opérations d'administration. Kafka Streams utilise également les propriétés de la base de données transactionnelle de Kafka pour stocker les métadonnées internes. Par conséquent, Pub/Sub Lite ne peut pas être utilisé pour les applications Kafka Streams.

Apache Beam est un système de traitement de données en flux similaire, 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 clusters Apache Flink et Apache Spark existants.

Surveiller

Les clients Kafka peuvent lire les métriques côté serveur. Dans Pub/Sub Lite, les métriques pertinentes pour 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. La réplication, la compaction des clés et les paramètres de lot déterminent la capacité requise pour traiter un sujet donné sur le cluster Kafka. Le débit d'un sujet Kafka est limité par la capacité des machines sur lesquelles les courtiers s'exécutent. En revanche, vous devez définir à la fois la capacité de stockage et de débit pour un sujet Pub/Sub Lite. La capacité de stockage Pub/Sub Lite est une propriété configurable du sujet. La capacité de débit est basée sur la capacité de la réservation configurée, ainsi que sur les limites par partition inhérentes ou configurées.

Authentification et sécurité

Apache Kafka est compatible avec plusieurs mécanismes d'authentification et de chiffrement ouverts. Avec Pub/Sub Lite, l'authentification est basée sur le système IAM. La sécurité est assurée par le chiffrement au repos et en transit. Pour en savoir plus sur l'authentification Pub/Sub Lite, consultez la section "Workflow de migration" plus loin dans ce document.

Mappage des propriétés Kafka sur les propriétés Pub/Sub Lite

Kafka propose de nombreuses options de configuration qui contrôlent la structure, les limites et les propriétés des brokers. Cette section présente quelques éléments courants utiles pour l'ingestion de données, avec leurs équivalents dans Pub/Sub Lite. Étant donné que Pub/Sub Lite est un système géré, vous n'avez pas besoin de prendre en compte de nombreuses propriétés de courtier.

Propriétés de configuration des sujets

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 des messages. Si vous ne spécifiez pas de durée de conservation des messages, le sujet Lite stocke les messages jusqu'à ce que vous dépassiez la capacité de stockage.
flush.ms, acks Non configurable dans Pub/Sub Lite Les publications ne sont pas confirmées tant qu'elles ne sont pas conservées dans un espace de stockage répliqué.
max.message.bytes Non configurable dans Pub/Sub Lite 3,5 Mo est la taille maximale de message pouvant être envoyée à Pub/Sub Lite. Les tailles de message sont calculées de manière répétitive.
message.timestamp.type Non configurable dans Pub/Sub Lite Lorsque vous utilisez l'implémentation du client, le code temporel de l'événement est choisi lorsqu'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 des sujets Lite, consultez la section Propriétés d'un sujet Lite.

Propriétés de configuration du producteur

Pub/Sub Lite est compatible avec le protocole de transmission du producteur. Certaines propriétés modifient le comportement des bibliothèques clientes Cloud du producteur. Certaines d'entre elles sont décrites 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 de consommateurs 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, value.serializer Non configurable dans Pub/Sub Lite

Obligatoire lorsque vous utilisez le producteur Kafka ou une bibliothèque équivalente qui communique à l'aide du protocole filaire.

batch.size Pris en charge dans Pub/Sub Lite Le traitement par lot est accepté. Pour des performances optimales, nous recommandons de définir cette valeur sur 10 Mo.
linger.ms Pris en charge dans Pub/Sub Lite Le traitement par lot est accepté. La valeur recommandée est de 50 ms pour des performances optimales.
max.request.size Pris en charge dans Pub/Sub Lite Le serveur impose une limite de 20 Mo par lot. Définissez cette valeur sur une valeur inférieure à 20 Mo dans votre client Kafka.
enable.idempotence Pris en charge dans Pub/Sub Lite
compression.type Non compatible avec Pub/Sub Lite Vous devez définir explicitement cette valeur sur none.

Propriétés de configuration du client

Pub/Sub Lite est compatible avec le protocole de communication consommateur. Certaines propriétés modifient le comportement des bibliothèques clientes Cloud grand public. Certaines d'entre elles sont décrites dans le tableau suivant.

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

Obligatoire lorsque vous utilisez le consommateur Kafka ou une bibliothèque équivalente qui communique à l'aide du protocole filaire.

auto.offset.reset Cette configuration n'est pas compatible ni nécessaire. Une fois créés, les abonnements disposent d'un décalage défini.
message.timestamp.type L'horodatage de publication est toujours disponible dans Pub/Sub Lite et est garanti de ne pas diminuer par partition. Les codes temporels des événements peuvent être présents ou non, selon qu'ils ont été associés au message lors de sa publication. Les codes temporels de publication et d'événement sont disponibles en même temps lorsque vous utilisez Dataflow.
max.partition.fetch.bytes, max.poll.records Impose une limite souple sur le nombre d'enregistrements et d'octets renvoyés à partir des appels poll() et le nombre d'octets renvoyés à partir des requêtes de récupération internes. La valeur par défaut de 1 Mo pour "max.partition.fetch.bytes" peut limiter le débit de votre client. Envisagez d'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, à l'aide de l'exportation Pub/Sub
Transactions Oui Non
Stockage des messages Limité par l'espace de stockage disponible sur la machine Illimité
Relecture des messages Oui Oui
Journalisation et surveillance Autogéré Automatisée avec Cloud Monitoring
Traitement en flux continu 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 qui sont gérées par Google à l'aide de Pub/Sub Lite:

Fonctionnalité Kafka Pub/Sub Lite
Disponibilité Déployez Kafka manuellement dans des emplacements supplémentaires. déployés dans le monde entier. Consultez la page Emplacements.
Reprise après sinistre Concevez et gérez votre propre sauvegarde et réplication. 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érente. Géré par Google.
Planification des capacités Planifiez manuellement les besoins de stockage et de calcul à l'avance. Géré par Google. Vous pouvez augmenter les ressources de calcul et de stockage à tout moment.
Assistance Aucun Personnel d'astreinte téléphonique et assistance disponibles 24h/24

Comparaison des coûts de Kafka et 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 le cloud comprennent les coûts des machines, du disque, de la mise en réseau, des messages entrants et des messages sortants. Il comprend également les coûts généraux de gestion et de maintenance de ces systèmes et de leur infrastructure associée. Lorsque vous gérez un cluster Kafka, vous devez mettre à niveau manuellement les machines, planifier la capacité du cluster et implémenter une reprise après sinistre qui implique une planification et des tests étendus. Vous devez agréger tous ces coûts pour connaître le coût total de possession réel (TCO).

La tarification de Pub/Sub Lite inclut le coût de 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 exactement les ressources que vous réservez, en plus des frais de messages sortants. Vous pouvez utiliser le simulateur de coût pour obtenir une estimation de 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éez une réservation Pub/Sub Lite pour le débit attendu pour tous les sujets que vous migrez.

    Utilisez le simulateur de prix Pub/Sub Lite pour calculer les métriques de débit agrégées de vos sujets Kafka existants. Pour en savoir plus sur la création de réservations, consultez Créer et gérer des réservations Lite.

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

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

  3. Créez un abonnement Pub/Sub Lite pour chaque paire de groupe de consommateurs et de sujet correspondants dans le cluster Kafka.

    Par exemple, pour un groupe de consommateurs nommé consumers qui consomme à partir de topic-a et topic-b, vous devez créer un abonnement consumers-a associé à topic-a et un abonnement consumers-b associé à topic-b. Pour en savoir plus sur la création d'abonnements, consultez la section 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 Kafka basés sur Java de la version 3.1.0 ou ultérieure qui peuvent ê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. Obtenez les paramètres nécessaires pour vous authentifier auprès de Pub/Sub Lite à l'aide de com.google.cloud.pubsublite.kafka.ClientParameters.getParams.

    La méthode getParams() (voir un exemple de code) initialise les configurations JAAS et SASL suivantes en tant que paramètres d'authentification auprès de 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 exécutant la version 3.1.0 ou ultérieure sans recompilation

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

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

  1. Installez Python 3.6 ou une version ultérieure.

    Consultez Installer Python.

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

    Cette bibliothèque simplifie les différents mécanismes d'authentification serveur à serveur pour accéder aux API Google. Consultez la 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 à l'aide de google.auth.default().

    Le principal des identifiants récupérés doit disposer de l'autorisation pubsublite.locations.openKafkaStream pour le projet Google Cloud que vous utilisez et l'emplacement auquel vous vous connectez. Les rôles Éditeur Pub/Sub Lite (roles/pubsublite.publisher) et Abonné Pub/Sub Lite (roles/pubsublite.subscriber) disposent de cette autorisation requise. Ajoutez ces rôles à votre compte principal.

    Les identifiants sont utilisés dans l'authentification SASL/OAUTHBEARER pour le client Kafka.

    Les paramètres suivants sont requis dans vos propriétés pour vous 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 de clé de compte de service pour le compte de service que vous prévoyez d'utiliser pour votre client.

  2. Encodez le fichier du compte de service à l'aide de base64-encode pour l'utiliser comme chaîne d'authentification.

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

    base64 < my_service_account.json > password.txt
    

    Vous pouvez utiliser le contenu du fichier de mots 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 à l'aide de Kafka Connect

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

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

Si vous souhaitez vous assurer que l'affinité de partition n'est pas affectée par le processus de migration, assurez-vous que le sujet Kafka et le sujet Pub/Sub Lite ont le même nombre de partitions et que la propriété pubsublite.ordering.mode est définie sur KAFKA. Le connecteur achemine ainsi les messages vers la partition Pub/Sub Lite avec le même indice que la partition Kafka sur laquelle ils ont été publiés à l'origine.

Migrer les consommateurs

Le modèle de ressources de Pub/Sub Lite est différent de celui de Kafka. Plus important encore, contrairement à un groupe de consommateurs, un abonnement est une ressource explicite et est associé à un seul et unique sujet. En raison de cette différence, à tout endroit de l'API Kafka Consumer qui nécessite la transmission d'un topic, le chemin d'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 Kafka Consumer pour interagir 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 de consommateur Pub/Sub Lite pour un abonnement donné, vous pouvez lancer une opération de recherche par administrateur (mais ne l'attendez pas) pour définir l'emplacement initial de votre consommateur.

Lorsque vous démarrez vos consommateurs, ils se reconnectent au décalage actuel dans la file d'attente de messages. Exécutez les anciens et nouveaux clients en parallèle aussi longtemps que nécessaire pour vérifier leur comportement, puis désactivez les anciens clients consommateurs.

Migrer des producteurs

En plus des configurations SASL pour le client Kafka, le paramètre suivant est également requis en tant que paramètre de producteur lorsque vous utilisez 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.

Une fois que vous avez migré tous les consommateurs du sujet pour lire à partir de Pub/Sub Lite, déplacez le trafic de votre producteur pour écrire directement dans Pub/Sub Lite.

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

Redémarrez les clients producteurs pour qu'ils récupèrent les nouvelles configurations.

Désactiver Kafka Connect

Une fois que vous avez migré tous les producteurs pour qu'ils écrivent directement dans Pub/Sub Lite, le connecteur ne copie plus les données.

Vous pouvez désactiver l'instance Kafka Connect.

Résoudre les problèmes de connexion Kafka

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

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

Débit faible et augmentation de la file d'attente

Plusieurs raisons peuvent expliquer pourquoi le débit est faible et que la file d'attente augmente. Cela peut être dû à une capacité insuffisante.

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

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

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

  • NO_RESERVATION_CAPACITY: ce message indique que la limite de débit par réservation est atteinte.

Vous pouvez afficher les graphiques d'utilisation pour le quota de publication et d'abonnement du sujet ou de la réservation, et vérifier si l'utilisation est à 100 % ou presque.

Pour résoudre ce problème, augmentez la capacité de débit du sujet ou de 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 des autorisations appropriées pour publier dans le sujet Pub/Sub Lite.

L'erreur TOPIC_AUTHORIZATION_FAILED s'affiche dans votre client si vous ne disposez pas des autorisations appropriées pour publier dans le sujet Pub/Sub Lite.

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

Message d'erreur indiquant que le thème n'est pas valide

Pour vous abonner à l'aide de l'API Kafka, vous devez transmettre le chemin d'abonnement complet à tous les endroits où un topic est attendu dans l'API Kafka Consumer.

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

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

L'utilisation de la prise en charge du protocole de transmission Kafka nécessite qu'une réservation soit associée à tous les sujets afin de facturer l'utilisation.