Les connecteurs de récepteur Cloud Storage diffusent les données de Kafka vers des buckets Cloud Storage, ce qui vous permet de stocker et de traiter de grands volumes de données de manière économique et évolutive.
Voici quelques cas d'utilisation des connecteurs de récepteur Cloud Storage :
Ingestion de lacs de données. Stockez les données Kafka dans un lac de données pour l'archivage à long terme et le traitement par lot.
Archivez les données pour répondre aux exigences réglementaires.
Avant de commencer
Avant de créer un connecteur de récepteur Cloud Storage, assurez-vous de disposer des éléments suivants :
Créez un cluster Managed Service pour Apache Kafka pour votre cluster Connect. Il s'agit du cluster Kafka principal associé au cluster Connect. Il s'agit également du cluster source qui forme l'une des extrémités du pipeline de connecteur.
Créez un cluster Connect pour héberger votre connecteur de récepteur Cloud Storage.
Créez un bucket Cloud Storage pour stocker les données diffusées depuis Kafka.
Créez et configurez un sujet Kafka dans le cluster source. Les données passent de ce sujet Kafka au bucket Cloud Storage de destination.
Rôles et autorisations requis
Pour obtenir les autorisations nécessaires pour créer un connecteur, demandez à votre administrateur de vous accorder le rôle IAM Éditeur de connecteur Kafka géré (roles/managedkafka.connectorEditor) sur votre projet.
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Ce rôle prédéfini contient les autorisations requises pour créer un connecteur. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
Les autorisations suivantes sont requises pour créer un connecteur :
-
Créer un connecteur :
managedkafka.connectors.create
Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.
Accorder des autorisations d'écriture dans le bucket Cloud Storage
Le compte de service Managed Kafka doit disposer des autorisations suivantes pour écrire des messages dans le bucket Cloud Storage :
storage.objects.createstorage.objects.delete
Attribuez le rôle Utilisateur d'objets Storage (roles/storage.objectUser) au compte de service sur le projet contenant le bucket Cloud Storage.
Le compte de service Managed Kafka a le format suivant :
service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com,
où PROJECT_NUMBER est le numéro de projet du cluster Connect.
Si votre cluster Connect se trouve dans un projet différent de votre cluster Managed Service pour Apache Kafka cluster, consultez Créer un cluster Connect dans un autre projet.
Créer un connecteur de récepteur Cloud Storage
Pour créer un connecteur de récepteur Cloud Storage, procédez comme suit.
Console
Dans la Google Cloud console, accédez à la page Connect Clusters.
Cliquez sur le cluster Connect pour lequel vous souhaitez créer le connecteur.
La page Connect cluster details (Détails du cluster Connect) s'affiche.
Cliquez sur Create connector (Créer un connecteur).
La page Create Kafka connector (Créer un connecteur Kafka) s'affiche.
Saisissez une chaîne pour le nom du connecteur.
Pour obtenir des instructions sur la façon de nommer un connecteur, consultez les consignes de dénomination des ressources Managed Service pour Apache Kafka.
Pour Connector plugin (Plug-in de connecteur), sélectionnez Cloud Storage Sink (Récepteur Cloud Storage).
Spécifiez les Topics (Sujets) à partir desquels vous pouvez diffuser des données.
Choisissez le Storage Bucket (Bucket de stockage) dans lequel stocker les données.
(Facultatif) Configurez d'autres paramètres dans la section Configuration.
Sélectionnez la Task restart policy (Règle de redémarrage des tâches). Pour en savoir plus, consultez la section Règle de redémarrage des tâches.
Cliquez sur Create (Créer).
gcloud
-
Dans la Google Cloud console, activez Cloud Shell.
En bas de la Google Cloud console, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement de shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.
Exécutez la
gcloud managed-kafka connectors createcommande :gcloud managed-kafka connectors create CONNECTOR_ID \ --location=LOCATION \ --connect-cluster=CONNECT_CLUSTER_ID \ --config-file=CONFIG_FILERemplacez les éléments suivants :
CONNECTOR_ID: ID ou nom du connecteur. Pour obtenir des instructions sur la façon de nommer un connecteur, consultez les consignes de dénomination des ressources Managed Service pour Apache Kafka. Le nom d'un connecteur est immuable.LOCATION: emplacement où vous créez le connecteur. Il doit s'agir du même emplacement que celui où vous avez créé le cluster Connect.CONNECT_CLUSTER_ID: ID du cluster Connect dans lequel le connecteur est créé.CONFIG_FILE: chemin d'accès au fichier de configuration YAML du connecteur.
Voici un exemple de fichier de configuration pour le connecteur de récepteur Cloud Storage :
connector.class: "io.aiven.kafka.connect.gcs.GcsSinkConnector" gcs.bucket.name: "BUCKET_NAME" gcs.credentials.default: "true" format.output.type: "json" key.converter: "org.apache.kafka.connect.storage.StringConverter" value.converter: "org.apache.kafka.connect.json.JsonConverter" value.converter.schemas.enable: "false" topics: "TOPIC_LIST" tasks.max: "3"Remplacez les éléments suivants :
BUCKET_NAME: nom du bucket Cloud Storage dans lequel écrire.TOPIC_LIST: liste de sujets Kafka à partir desquels lire, séparés par une virgule. La liste peut également inclure des expressions régulières.
Terraform
Vous pouvez utiliser une ressource Terraform pour créer un connecteur.
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.
Go
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go décrites dans Installer les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Go de Managed Service pour Apache Kafka.
Pour vous authentifier auprès de Managed Service pour Apache Kafka, configurez les identifiants par défaut de l'application(ADC). Pour en savoir plus, consultez Configurer les ADC pour un environnement de développement local.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java décrites dans Installer les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Java de Managed Service pour Apache Kafka.
Pour vous authentifier auprès de Managed Service pour Apache Kafka, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer les ADC pour un environnement de développement local.
Python
Avant d'essayer cet exemple, suivez les instructions de configuration pour Python décrites dans Installer les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Python de Managed Service pour Apache Kafka.
Pour vous authentifier auprès de Managed Service pour Apache Kafka, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer les ADC pour un environnement de développement local.
Une fois que vous avez créé un connecteur, vous pouvez le modifier, le supprimer, le mettre en veille, l'arrêter ou le redémarrer.
Configurer le connecteur
Pour obtenir la liste complète des propriétés spécifiques à ce connecteur, consultez la section Configuration de la documentation du connecteur de récepteur Cloud Storage.
Output fields
Par défaut, le connecteur n'écrit que la valeur d'enregistrement de chaque enregistrement Kafka.
Pour inclure des clés ou des en-têtes d'enregistrement, définissez la propriété format.output.fields sur une liste de champs à inclure, séparés par une virgule. Les champs acceptés sont key, value, headers et timestamp. Exemple :
format.output.fields=key,value,headers
Formats de sortie
Le connecteur est compatible avec l'écriture d'enregistrements Kafka aux formats CSV, JSON et Parquet. Les sections suivantes décrivent comment configurer le format de sortie.
Format CSV
Pour écrire des fichiers CSV dans Cloud Storage, définissez format.output.type=csv.
Utilisez les convertisseurs suivants :
Convertisseur de clés :
org.apache.kafka.connect.storage.StringConverterouorg.apache.kafka.connect.json.JsonConverterConvertisseur de valeurs :
org.apache.kafka.connect.converters.ByteArrayConverter
Format JSON
Pour écrire des fichiers au format JSON dans Cloud Storage, définissez format.output.type sur l'une des valeurs suivantes :
json: chaque fichier de sortie contient un seul tableau d'objets JSON, où chaque objet JSON représente un enregistrement Kafka.jsonl: le connecteur écrit chaque enregistrement Kafka en tant qu'objet JSON sur une ligne distincte.
L'exemple suivant montre comment le connecteur écrit un enregistrement Kafka au format JSON :
{"headers":[{"key":"k1","value":"v1"},{"key":"k2","value":"v2"}],"value":"Hello world","key":"my-key"}
Si vous définissez le convertisseur de clés ou de valeurs sur org.apache.kafka.connect.converters.ByteArrayConverter, le connecteur écrit ce champ en tant que valeur encodée en base64.
Le connecteur n'inclut pas de schéma JSON dans la sortie, même si value.converter.schemas.enable est défini sur true.
Format Parquet
Pour écrire des fichiers Parquet dans Cloud Storage, définissez format.output.type=parquet.
Si le convertisseur de clés ou de valeurs est org.apache.kafka.connect.json.JsonConverter, les données JSON doivent inclure un schéma. Définissez la propriété schemas.enable du convertisseur sur true.
Pour les données JSON, le connecteur écrit les données en tant que type struct dans le fichier Parquet. Par exemple, si la valeur d'enregistrement Kafka comporte un champ nommé userid, le
connecteur écrit une colonne nommée value.userid. Pour aplatir les noms de colonnes, définissez format.output.envelope=false. Si format.output.envelope est false, alors
format.output.fields doit spécifier un seul champ de sortie.
Paramètres de fichier Cloud Storage
Les paramètres suivants contrôlent la façon dont le connecteur écrit des fichiers dans Cloud Storage.
gcs.bucket.name: valeur obligatoire. Spécifie le nom du bucket Cloud Storage dans lequel le connecteur écrit des données.file.compression.type: spécifie le type de compression des fichiers de sortie. Exemples :gzip,snappy,zstdetnone. La valeur par défaut estnone.file.name.prefix: spécifie un préfixe à ajouter au nom de chaque fichier. La valeur par défaut est vide ("").file.name.template: spécifie un modèle pour le nom de fichier. Le connecteur est compatible avec les variables d'espace réservé pour le modèle, telles que{{topic}}pour le nom du sujet et{{partition}}pour le numéro de partition. Pour en savoir plus, consultez la documentation du connecteur de récepteur Cloud Storage.file.max.records: nombre maximal d'enregistrements à écrire dans un seul fichier. Si la valeur est 0, il n'y a pas de maximum spécifique. La valeur par défaut est 0.file.max.bytes: taille maximale du fichier à écrire, en octets. Si la valeur est 0, il n'y a pas de maximum spécifique. La valeur par défaut est 0.
Regroupement d'enregistrements
Lorsque le connecteur de récepteur Cloud Storage écrit des enregistrements Kafka, il les regroupe par défaut par sujet et par partition. Par exemple, les enregistrements de
la partition 0 du sujet my-topic sont écrits dans des fichiers nommés
my-topic-0-OFFSET, où
OFFSET est le décalage de début.
Si le paramètre file.name.template inclut la variable d'espace réservé
{{key}}, le
connecteur regroupe les enregistrements par clé. Dans ce mode, le connecteur écrit un fichier distinct pour chaque clé d'enregistrement. Le connecteur remplace chaque fichier par le dernier enregistrement de cette clé.
Identifiants
La propriété gcs.credentials.default doit être définie sur true. Ce paramètre
permet au connecteur de découvrir Google Cloud automatiquement les identifiants.
Étape suivante
Résoudre les problèmes liés à un connecteur de récepteur Cloud Storage
Mettre en veille, réactiver, arrêter et redémarrer un connecteur