Passer au contenu

Sémantique de livraison des événements

Cette page décrit et définit la manière dont Currents gère les données d’événements sous forme de fichiers plats que nous envoyons aux partenaires de stockage de l’entrepôt de données.

Currents for Data Storage permet un flux continu de données de notre plateforme vers un compartiment de stockage de l’un de nos partenaires d’entrepôt de données. Currents écrit les fichiers Avro dans votre compartiment de stockage à des seuils réguliers, ce qui vous permet de traiter et d’analyser les données d’événements en utilisant vos propres outils d’aide à la décision.

Événements de test

Lorsque vous configurez une intégration Currents, cliquez sur Envoyer des événements de test pour vérifier la connexion avec votre compartiment de stockage. Ces événements de test permettent de valider que votre intégration peut recevoir et traiter les données correctement.

Livraison au moins une fois

En tant que système à haut débit, Currents assure une livraison des événements « au moins une fois », ce qui signifie que des événements en double peuvent parfois être écrits dans votre compartiment de stockage. Cela peut se produire lorsque des événements sont retraités à partir de notre file d’attente, quelle qu’en soit la raison.

Si vos cas d’usage exigent une livraison « exactement une fois », vous pouvez utiliser le champ d’identifiant unique envoyé avec chaque événement (id) pour dédupliquer les événements. Comme le fichier échappe à notre contrôle dès qu’il est écrit dans votre compartiment de stockage, nous n’avons aucun moyen de garantir la déduplication de notre côté.

Horodatages

Tous les horodatages exportés par Currents sont envoyés dans le fuseau horaire UTC. Certains événements incluent aussi, lorsqu’il est disponible, un champ de fuseau horaire qui indique le fuseau horaire local de l’utilisateur au moment de l’événement, au format de l’Internet Assigned Numbers Authority (IANA).

Latence

Les événements envoyés à Braze via le SDK ou l’API peuvent comporter un horodatage passé. C’est notamment le cas lorsque les données du SDK sont mises en file d’attente, par exemple en l’absence de connectivité mobile. L’horodatage de l’événement correspond alors au moment où l’événement a été généré. Une partie des événements semblera donc présenter une latence élevée.

Les SDK Android, Swift et Web de Braze stockent les événements non envoyés sur l’appareil et réessaient de les envoyer une fois l’appareil reconnecté, sans limite de temps. Pour le SDK Web, les événements en file d’attente ne sont limités que par le stockage du navigateur (environ 5 Mo).

Il n’existe pas de fenêtre maximale pour les événements arrivés en retard. Currents est conçu pour exporter chaque événement reçu, quelle que soit l’ancienneté de son horodatage. Un événement arrivé en retard est écrit dans la partition date= correspondant à l’heure à laquelle il a été mis en file d’attente pour traitement dans Braze, et conserve son horodatage d’origine dans le champ time. Braze ne réintègre pas les événements tardifs dans des partitions antérieures.

Comme les événements tardifs arrivent dans les partitions actuelles, Braze recommande de traiter les fichiers au fur et à mesure de leur écriture dans votre compartiment de stockage, plutôt que de réanalyser les anciennes partitions date= avec une fenêtre rétrospective. Pour supprimer les doublons, utilisez le champ id de l’événement, comme décrit dans la section Livraison au moins une fois.

Format Apache Avro

Les intégrations de stockage de données de Braze Currents produisent des données au format .avro. Nous avons choisi Apache Avro parce qu’il s’agit d’un format de données flexible qui prend en charge nativement l’évolution des schémas et qui est compatible avec un large éventail de produits de données :

  • Avro est pris en charge par presque tous les grands entrepôts de données.
  • Si vous souhaitez conserver vos données dans S3, Avro offre une meilleure compression que CSV et JSON : vous payez donc moins pour le stockage et pouvez potentiellement utiliser moins de CPU pour analyser les données.
  • Avro exige des schémas lors de l’écriture ou de la lecture des données. Les schémas peuvent évoluer au fil du temps pour gérer l’ajout de champs sans rien casser.

Currents crée un fichier pour chaque type d’événement selon le format suivant :

<your-bucket-prefix>/dataexport.<cluster-identifier>.<connection-type-identifier>.integration.<integration-id>/event_type=<event-type>/date=<date>/version=<currents_version>/<environment>/dataexport.<cluster-identifier>.<connection-type-identifier>.integration.<integration-id>+<partition>+<offset>.avro

Par exemple, le chemin d’un événement d’envoi de notification push peut ressembler à ceci :

currents-export/dataexport.prod-01.S3.integration.69cadaaed2d51b7c75b1a3e5/event_type=users.messages.pushnotification.Send/date=2025-04-01-17/version=6/us-01/dataexport.prod-01.S3.integration.69cadaaed2d51b7c75b1a3e5+0+123456.avro

Le segment de chemin version est une simple valeur entière correspondant à la version de Currents, par exemple version=6.

Segment du nom de fichier Définition
<your-bucket-prefix> Le préfixe défini pour cette intégration Currents.
<cluster-identifier> Réservé à un usage interne par Braze. Il s’agit d’une chaîne de caractères telle que « prod-01 », « prod-02 », « prod-03 » ou « prod-04 ». Tous les fichiers ont le même identifiant de cluster.
<connection-type-identifier> L’identifiant du type de connexion. Les options sont « S3 », « AzureBlob » ou « GCS ».
<integration-id> L’ID unique de cette intégration Currents. Braze définit cet ID lorsque vous créez l’intégration, et il ne change pas lorsque vous modifiez les paramètres de l’intégration (comme les transformations de champs).
<event-type> Le type d’événement contenu dans le fichier.
<date> L’heure à laquelle les événements sont placés dans la file d’attente de notre système pour traitement, dans le fuseau horaire UTC. Au format AAAA-MM-JJ-HH.
version=<currents_version> La version de Currents pour le chemin du pipeline. Cette valeur est un simple entier, par exemple 6.
<environment> Réservé à un usage interne par Braze.
<partition> Réservé à un usage interne par Braze. Entier.
<offset> Réservé à un usage interne par Braze. Entier. Notez que des fichiers différents envoyés au cours de la même heure auront un paramètre <offset> différent.

Seuil d’écriture Avro

Dans des conditions normales, Braze écrit des fichiers de données dans votre compartiment de stockage toutes les 5 minutes ou tous les 15 000 événements, selon ce qui survient en premier. En cas de forte charge, nous pouvons écrire des fichiers de données plus volumineux contenant jusqu’à 100 000 événements par fichier.

Currents est conçu pour mettre en mémoire tampon en interne d’importants pics d’événements, comme ceux générés par un message envoyé à des millions d’utilisateurs. Vous n’avez pas besoin de prévoir un débit d’écriture ou une capacité d’E/S supplémentaires sur votre compartiment de stockage pour ces pics.

Modifications du schéma Avro

Braze peut occasionnellement modifier le schéma Avro lorsque des champs sont ajoutés, modifiés ou supprimés. Dans ce contexte, il existe deux types de modifications : les modifications avec rupture et sans rupture. Toutes les modifications de schéma sont regroupées dans des versions de Currents, et chaque version incrémente le segment version=<currents_version> dans le chemin de stockage (par exemple, de version=6 à version=7). Les événements Currents écrits dans Azure Blob Storage, Google Cloud Storage et Amazon S3 utilisent le format de chemin suivant :

<your-bucket-prefix>/<currents-integration-id>/event_type=<event-type>/date=<date>/version=<currents_version>/<environment>/<avro-file>

Modifications sans rupture

Lorsqu’un champ est ajouté au schéma Avro, nous considérons qu’il s’agit d’une modification sans rupture. Les champs ajoutés sont toujours des champs Avro « facultatifs » (par exemple avec une valeur par défaut de null), ils « correspondent » donc aux anciens schémas conformément à la spécification de résolution des schémas Avro. Ces ajouts ne devraient pas affecter les processus ETL (extraire, transformer, charger) existants, car le champ sera simplement ignoré jusqu’à ce que vous l’ajoutiez à votre processus ETL.

Modifications avec rupture

Lorsqu’un champ est supprimé ou modifié dans le schéma Avro, nous considérons qu’il s’agit d’une modification avec rupture. Les modifications avec rupture peuvent nécessiter d’adapter les processus ETL existants, car des champs utilisés pourraient ne plus être enregistrés comme prévu.

Toutes les modifications avec rupture sont communiquées avant la publication de la version.

Pour consulter l’historique complet des modifications par version, reportez-vous au journal des modifications de Currents.

New Stuff!