Migrer de Kafka vers Pub/Sub Lite

Ce document est utile si vous envisagez de migrer des 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 API zonales et régionales 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

  • 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. Sujets zonaux Pub/Sub Lite répliquer 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 similaire à 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 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 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 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 envisageable, 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 consommateurs, 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 les 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 de traitement des 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 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. 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 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 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 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. Pub/Sub Lite vous n'avez pas à vous soucier 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 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 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 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 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 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, 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 de définir cette valeur sur 10 Mo.
linger.ms Compatible avec 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 Mio par lot. Définissez cette valeur sur moins de 20 Mio dans votre client Kafka.
enable.idempotence Pris en charge dans 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 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 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 ni nécessaire. Une fois créés, les abonnements disposent d'un 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é associés 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 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 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 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 liste des zones géographiques.
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érents. Géré par Google.
Planification des capacités Planifiez manuellement vos besoins en stockage et en calcul. 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 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 œuvre une reprise après sinistre qui comprend une planification et des tests approfondis. 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 uniquement pour les ressources en plus des frais liés aux 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.

    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 section 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 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 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. 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 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é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 à 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 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 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 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 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 à 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 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 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 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 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 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 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 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.

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.

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 producteurs pour qu'ils récupèrent 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 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 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 limite de débit par partition est 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 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 valeur capacité de débit du 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 été transmis 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'abonnement complet 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 transmettez pas de 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.