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
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.
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.
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 detopic-a
ettopic-b
, vous devez créer un abonnementconsumers-a
associé àtopic-a
et un abonnementconsumers-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 exécutant la version 3.1.0 ou ultérieure avec recompilation
Clients Kafka basés sur Java exécutant la version 3.1.0 ou ultérieure sans recompilation
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 :
Installez le package
com.google.cloud:pubsublite-kafka-auth
.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 :
Installez Python 3.6 ou une version ultérieure.
Consultez Installer Python.
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
.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:
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.
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.