Zum Inhalt springen

Semantik der Zustellung von Events

Auf dieser Seite wird beschrieben und definiert, wie Currents die Flat-File-Event-Daten verwaltet, die wir an Data Warehouse-Speicherpartner senden.

„Currents für Datenspeicher“ ist ein kontinuierlicher Datenstrom von unserer Plattform zu einem Speicher-Bucket auf einer unserer Data Warehouse-Partnerverbindungen. Currents schreibt Avro-Dateien in regelmäßigen Abständen in Ihren Speicher-Bucket, sodass Sie die Event-Daten mit Ihrem eigenen Business-Intelligence-Toolset (BI) verarbeiten und analysieren können.

Testereignisse

Wenn Sie eine Currents-Integration einrichten, klicken Sie auf Send Test Events, um die Verbindung mit Ihrem Speicher-Bucket zu überprüfen. Diese Testereignisse bestätigen, dass Ihre Integration Daten korrekt empfangen und verarbeiten kann.

Zustellung nach dem At-least-once-Prinzip

Als Hochdurchsatzsystem bietet Currents eine „At-least-once“-Zustellung von Ereignissen, was bedeutet, dass duplizierte Ereignisse gelegentlich in Ihren Speicher-Bucket geschrieben werden können. Dies kann passieren, wenn Ereignisse aus unserer Warteschlange aus irgendeinem Grund erneut verarbeitet werden.

Wenn Ihre Anwendungsfälle eine „Exactly-once“-Zustellung erfordern, können Sie das eindeutige Bezeichnerfeld, das mit jedem Ereignis gesendet wird (id), verwenden, um Ereignisse zu deduplizieren. Da die Datei unserer Kontrolle entzogen ist, sobald sie in Ihren Speicher-Bucket geschrieben wurde, können wir keine Deduplizierung auf unserer Seite garantieren.

Zeitstempel

Alle von Currents exportierten Zeitstempel werden in der Zeitzone UTC gesendet. Bei einigen Ereignissen, bei denen es verfügbar ist, wird auch ein Zeitzonen-Feld mitgeliefert, das die Ortszeit der Nutzer:innen zum Zeitpunkt des Ereignisses im Format der Internet Assigned Numbers Authority (IANA) enthält.

Latenz

Ereignisse, die über SDK oder API an Braze gesendet werden, können einen Zeitstempel aus der Vergangenheit enthalten. Das häufigste Beispiel ist, wenn SDK-Daten in eine Warteschlange gestellt werden, etwa wenn keine mobile Verbindung besteht. In diesem Fall spiegelt der Zeitstempel des Ereignisses den Zeitpunkt wider, zu dem das Ereignis erzeugt wurde. Das bedeutet, dass ein gewisser Prozentsatz der Ereignisse eine hohe Latenz aufzuweisen scheint.

Apache-Avro-Format

Die Braze-Currents-Datenspeicherintegrationen geben Daten im .avro-Format aus. Wir haben uns für Apache Avro entschieden, weil es ein flexibles Datenformat ist, das nativ Schema-Evolution unterstützt und von einer Vielzahl von Datenprodukten unterstützt wird:

  • Avro wird von nahezu jedem großen Data Warehouse unterstützt.
  • Falls Sie Ihre Daten in S3 belassen möchten, komprimiert Avro besser als CSV und JSON, sodass Sie weniger für Speicher bezahlen und potenziell weniger CPU für das Parsen der Daten benötigen.
  • Avro erfordert Schemas, wenn Daten geschrieben oder gelesen werden. Schemas können im Laufe der Zeit weiterentwickelt werden, um das Hinzufügen von Feldern zu behandeln, ohne dass etwas kaputtgeht.

Currents erstellt eine Datei für jeden Ereignistyp im folgenden Format:

<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

Zum Beispiel kann ein Pfad für ein Push-Sendeereignis so aussehen:

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

Das Pfadsegment version ist ein einfacher ganzzahliger Currents-Versionswert, wie z. B. version=6.

Dateinamensegment Definition
<your-bucket-prefix> Das für diese Currents-Integration festgelegte Präfix.
<cluster-identifier> Für die interne Verwendung durch Braze. Ist ein String wie „prod-01“, „prod-02“, „prod-03“ oder „prod-04“. Alle Dateien haben denselben Cluster-Bezeichner.
<connection-type-identifier> Der Bezeichner für den Verbindungstyp. Optionen sind „S3“, „AzureBlob“ oder „GCS“.
<integration-id> Die eindeutige ID für diese Currents-Integration.
<event-type> Der Typ des Ereignisses in der Datei.
<date> Die Stunde, in der Ereignisse in unserem System zur Verarbeitung in der UTC-Zeitzone in die Warteschlange eingereiht werden. Formatiert als JJJJ-MM-TT-HH.
version=<currents_version> Die Currents-Version für den Pipeline-Pfad. Dieser Wert ist eine einfache Ganzzahl wie 6.
<environment> Für die interne Verwendung durch Braze.
<partition> Für die interne Verwendung durch Braze. Ganzzahl.
<offset> Für die interne Verwendung durch Braze. Ganzzahl. Beachten Sie, dass verschiedene Dateien, die innerhalb derselben Stunde gesendet werden, einen unterschiedlichen <offset>-Parameter haben.

Avro-Schreibschwelle

Unter normalen Umständen schreibt Braze alle 5 Minuten oder alle 15.000 Ereignisse Dateien in Ihren Speicher-Bucket, je nachdem, was zuerst eintritt. Bei hoher Last können wir größere Dateien mit bis zu 100.000 Ereignissen pro Datei schreiben.

Avro-Schemaänderungen

Von Zeit zu Zeit kann Braze Änderungen am Avro-Schema vornehmen, wenn Felder hinzugefügt, geändert oder entfernt werden. Für unsere Zwecke gibt es hier zwei Arten von Änderungen: nicht-brechende und brechende. Alle Schemaänderungen werden in Currents-Releases gebündelt, und jedes Release erhöht das Segment version=<currents_version> im Speicherpfad (zum Beispiel von version=6 auf version=7). Currents-Ereignisse, die in Azure Blob Storage, Google Cloud Storage und Amazon S3 geschrieben werden, verwenden das folgende Pfadformat:

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

Nicht-brechende Änderungen

Wenn ein Feld zum Avro-Schema hinzugefügt wird, betrachten wir dies als nicht-brechende Änderung. Hinzugefügte Felder sind immer „optionale“ Avro-Felder (z. B. mit einem Standardwert von null), sodass sie gemäß der Avro-Schemaauflösungsspezifikation mit älteren Schemas „übereinstimmen“. Diese Ergänzungen sollten bestehende ETL-Prozesse (Extract, Transform, Load) nicht beeinträchtigen, da das Feld einfach ignoriert wird, bis es zu Ihrem ETL-Prozess hinzugefügt wird.

Brechende Änderungen

Wenn ein Feld aus dem Avro-Schema entfernt oder geändert wird, betrachten wir dies als brechende Änderung. Brechende Änderungen können Modifikationen an bestehenden ETL-Prozessen erfordern, da Felder, die verwendet wurden, möglicherweise nicht mehr wie erwartet aufgezeichnet werden.

Alle brechenden Änderungen werden im Voraus vor dem Release kommuniziert.

Eine vollständige Änderungshistorie nach Version finden Sie im Currents-Changelog.

New Stuff!