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 réduire les coûts d'exploitation. Pub/Sub Lite offre 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 que les sujets Pub/Sub. Cependant, il existe des différences de fiabilité entre Pub/Sub et 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 les zones disponibles avec Lite, consultez la page 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 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 les 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é. Un client de Pub/Sub Lite qui reçoit les messages d'un sujet Lite et d'un abonnement spécifié. Un abonnement peut avoir plusieurs clients abonnés. Dans ce cas, les messages font l'objet d'un équilibrage de charge entre les clients abonnés. Dans Kafka, un abonné s'appelle un consommateur.

  • Éditeur. Application qui crée des messages et les envoie (les publie) dans 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 et davantage axée sur l'ingestion de données. Bien que les différences soient insignifiantes pour l'ingestion et le traitement de flux, elles sont importantes dans certains cas d'utilisation spécifiques.

Kafka en tant que base de données

Contrairement à Kafka, Pub/Sub Lite n'est actuellement pas compatible avec la publication transactionnelle ni le compactage des journaux, bien que l'idempotence soit prise en charge. Ces fonctionnalités de Kafka sont plus utiles lorsque vous utilisez Kafka en tant que base de données plutôt qu'en tant que système de messagerie. Si vous utilisez principalement Kafka 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 possible, vous pouvez également envisager d'utiliser une base de données à évolutivité horizontale telle que Cloud Spanner.

Flux Kafka

Les flux Kafka sont un système de traitement des données basé sur Kafka. Bien qu'il permette l'injection de clients grand public, il nécessite un accès à toutes les opérations d'administration. Kafka Streams utilise également les propriétés de base de données transactionnelles de Kafka pour stocker des métadonnées internes. Pub/Sub Lite ne peut donc pas actuellement être utilisé pour les applications de flux Kafka.

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

Surveiller

Les clients Kafka peuvent lire les métriques côté serveur. Dans Pub/Sub Lite, les métriques liées au 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 des clés et de traitement par lot déterminent la capacité requise pour desservir 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 de 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, et sur les 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 le système IAM. La sécurité est assurée grâce au 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.

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 d'agent. Certaines fonctionnalités courantes utiles pour l'ingestion de données sont présentées dans cette section, avec leurs équivalents dans Pub/Sub Lite. Pub/Sub Lite étant 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 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 d'un 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 le protocole filaire du producteur. Certaines propriétés modifient le comportement des bibliothèques clientes Cloud producteurs. Certaines sont courantes 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 le protocole filaire consommateur. Certaines propriétés modifient le comportement des bibliothèques clientes Cloud grand public. Certaines des propriétés courantes sont décrites 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
Qui peut en bénéficier ? 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 None. 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 dans Kafka. Les coûts d'un cluster Kafka sur site ou dans le cloud incluent les coûts des machines, des disques, de la mise en réseau, des messages entrants et des messages sortants. Il comprend également les frais généraux liés à la gestion et à la 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 mettre en œuvre la reprise après sinistre, qui inclut une planification et des tests approfondis. Vous devez agréger tous ces différents coûts pour déterminer votre coût total de possession (TCO) réel.

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 pour les ressources que vous réservez, en plus des frais liés aux messages sortants. Vous pouvez utiliser le 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éez une réservation Pub/Sub Lite pour le débit attendu pour tous les sujets que vous migrez.

    Utilisez le simulateur de coût Pub/Sub Lite pour calculer les métriques de débit agrégé 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é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 page Créer et gérer des sujets Lite.

  3. Créez un abonnement Pub/Sub Lite pour chaque paire de groupes de consommateurs et de sujets correspondants 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 associé à topic-a et un abonnement consumers-b associé à topic-b. Pour en savoir plus sur la création d'abonnements, consultez la page 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 recréé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 à l'authentification 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 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 3.1.0 ou ultérieure de Java janvier 2022.

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 l'accès aux API Google par les différents mécanismes d'authentification de serveur à serveur. 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 compte principal indiqué dans les 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 d'éditeur Pub/Sub Lite (roles/pubsublite.publisher) et d'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 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 de clé de compte de service pour le compte de service que vous souhaitez utiliser pour votre client.

  2. Encodez le fichier de compte de service à l'aide de l'encodage en base64 à 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 mot de passe pour l'authentification à l'aide des 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 une implémentation d'un 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'un cluster Kafka Connect.

Pour configurer le connecteur afin d'effectuer la copie de données, consultez la page 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. Cela oblige le connecteur à acheminer les messages vers la partition Pub/Sub Lite avec le même index que la partition kafka sur laquelle ils ont été publiés initialement.

Migrer les clients

Le modèle de ressources de Pub/Sub Lite est différent de celui de Kafka. En particulier, contrairement à un groupe de consommateurs, un abonnement est une ressource explicite associée à un seul sujet. En raison de cette différence, le chemin d'accès complet de l'abonnement doit être transmis à tout emplacement de l'API Consommateur Kafka qui nécessite un topic.

Outre les configurations SASL pour le client Kafka, les paramètres suivants sont également requis lorsque vous utilisez l'API Consumer Kafka 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 administrateur (sans attendre) afin de définir l'emplacement initial du client.

Lorsque vous démarrez vos clients, ils se reconnectent au décalage actuel des messages en attente. Exécutez les anciens et les nouveaux clients en parallèle le temps de vérifier leur comportement, puis désactivez les anciens clients.

Migrer des producteurs

En plus des configurations SASL pour le client Kafka, les éléments suivants sont é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.

Après avoir migré tous les consommateurs du sujet pour qu'ils puissent lire des données à partir de Pub/Sub Lite, déplacez le trafic de votre producteur pour qu'il écrive directement dans Pub/Sub Lite.

Migrer progressivement les clients du producteur pour qu'ils écrivent dans le sujet Pub/Sub Lite plutôt que dans le sujet Kafka.

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

Baisser Kafka Connect

Une fois que vous avez migré tous les producteurs pour écrire 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. Appuyez-vous sur les codes d'erreur envoyés dans le message.

Pour en savoir plus sur les erreurs qui se produisent dans le client, 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 faible débit 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 ou à l'aide de réservations. Si une capacité de débit insuffisante pour l'abonnement et la publication est configurée, 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 du quota de sujet ou de réservation, de publication et d'abonnement, et vérifier si l'utilisation est égale ou proche de 100%.

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 nécessaires 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 transmis 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'abonnement complet à tous les emplacements 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 un chemin d'abonnement correctement formaté.

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

Pour utiliser le protocole filaire Kafka, tous les sujets doivent être associés à une réservation pour que leur utilisation soit facturée.