Ir para o conteúdo

Semântica de entrega de eventos

Esta página descreve e define como o Currents gerencia os dados de eventos de arquivo simples que enviamos aos parceiros do Data Warehouse Storage.

O Currents for Data Storage é um fluxo contínuo de dados da nossa plataforma para um bucket de armazenamento em uma das conexões de nossos parceiros de data warehouse. O Currents grava arquivos Avro no seu bucket de armazenamento em intervalos regulares, permitindo que você processe e analise os dados do evento usando seu próprio conjunto de ferramentas de business intelligence (BI).

Eventos de teste

Ao configurar uma integração do Currents, clique em Enviar eventos de teste para verificar a conexão com seu bucket de armazenamento. Esses eventos de teste confirmam que sua integração consegue receber e processar dados corretamente.

Entrega pelo menos uma vez

Como um sistema de alto rendimento, o Currents oferece uma entrega de eventos “pelo menos uma vez”. Isso significa que, ocasionalmente, eventos duplicados podem ser gravados no seu bucket de armazenamento. Isso pode acontecer quando os eventos são reprocessados a partir da nossa fila por qualquer motivo.

Se os seus casos de uso exigirem uma entrega “exatamente uma vez”, você pode usar o campo de identificador exclusivo enviado com cada evento (id) para eliminar eventos duplicados. Como o arquivo sai do nosso controle quando é gravado no seu bucket de armazenamento, não temos como garantir a eliminação de duplicatas do nosso lado.

Carimbos de data/hora

Todos os registros de data e hora exportados pelo Currents são enviados no fuso horário UTC. Em alguns eventos, quando disponível, também é incluído um campo de fuso horário. Esse campo traz o fuso local do usuário no momento do evento, no formato da Internet Assigned Numbers Authority (IANA).

Latência

Os eventos enviados à Braze por meio do SDK ou da API podem incluir um registro de data e hora do passado. O exemplo mais comum é quando os dados do SDK ficam em fila, como quando não há conectividade móvel. Nesse caso, o registro de data e hora do evento vai refletir o momento em que o evento foi gerado. Por isso, uma porcentagem dos eventos vai parecer ter alta latência.

Os SDKs da Braze para Android, Swift e web armazenam no dispositivo os eventos não enviados e tentam enviá-los novamente depois que o dispositivo se reconecta, sem limite de tempo. No SDK para web, os eventos em fila são limitados apenas pelo armazenamento do navegador (cerca de 5 MB).

Não existe uma janela máxima para eventos que chegam com atraso. O Currents foi projetado para exportar todos os eventos que recebe, independentemente da idade do registro de data e hora do evento. Um evento atrasado é gravado na partição date= correspondente à hora em que entrou na fila de processamento da Braze e mantém o registro de data e hora original no campo time. A Braze não reprocessa eventos atrasados em partições anteriores.

Como os eventos atrasados chegam às partições atuais, a Braze recomenda processar os arquivos à medida que são gravados no seu bucket de armazenamento, em vez de verificar novamente partições date= mais antigas com uma janela retroativa. Para remover duplicatas, use o campo id do evento, conforme descrito em Entrega pelo menos uma vez.

Formato Apache Avro

As integrações de armazenamento de dados do Braze Currents geram dados no formato .avro. Escolhemos o Apache Avro porque ele é um formato de dados flexível, que oferece suporte nativo à evolução de esquemas e é compatível com uma grande variedade de produtos de dados:

  • O Avro é compatível com quase todos os principais data warehouses.
  • Caso você queira manter seus dados no S3, o Avro compacta melhor do que CSV e JSON. Assim, você paga menos pelo armazenamento e pode usar menos CPU para analisar os dados.
  • O Avro exige esquemas quando os dados são gravados ou lidos. Os esquemas podem evoluir com o tempo para lidar com a adição de campos sem quebras.

O Currents cria um arquivo para cada tipo de evento usando o seguinte formato:

<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

Por exemplo, o caminho de um evento de envio de push pode ser assim:

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

O segmento de caminho version é um valor inteiro simples da versão do Currents, como version=6.

Segmento do nome do arquivo Definição
<your-bucket-prefix> O prefixo definido para essa integração do Currents.
<cluster-identifier> Para uso interno da Braze. Será uma string como “prod-01”, “prod-02”, “prod-03” ou “prod-04”. Todos os arquivos terão o mesmo identificador de cluster.
<connection-type-identifier> O identificador do tipo de conexão. As opções são “S3”, “AzureBlob” ou “GCS”.
<integration-id> O ID exclusivo dessa integração do Currents. A Braze define esse ID quando você cria a integração, e ele não muda quando você edita as configurações da integração (como transformações de campo).
<event-type> O tipo do evento no arquivo.
<date> A hora em que os eventos entram na fila do nosso sistema para processamento, no fuso horário UTC. Formatado como AAAA-MM-DD-HH.
version=<currents_version> A versão do Currents para o caminho do pipeline. Esse valor é um número inteiro simples, como 6.
<environment> Para uso interno da Braze.
<partition> Para uso interno da Braze. Número inteiro.
<offset> Para uso interno da Braze. Número inteiro. Note que arquivos diferentes enviados dentro da mesma hora terão um parâmetro <offset> diferente.

Limite de gravação do Avro

Em circunstâncias normais, a Braze grava arquivos de dados no seu bucket de armazenamento a cada 5 minutos ou a cada 15.000 eventos, o que ocorrer primeiro. Sob carga pesada, podemos gravar arquivos de dados maiores, com até 100.000 eventos por arquivo.

O Currents foi projetado para armazenar internamente em buffer grandes picos de eventos, como os eventos de uma mensagem enviada para milhões de usuários. Você não precisa planejar capacidade extra de gravação ou de E/S no seu bucket de armazenamento para esses picos.

Alterações no esquema Avro

De tempos em tempos, a Braze pode fazer alterações no esquema Avro quando campos são adicionados, alterados ou removidos. Para nossos propósitos aqui, existem dois tipos de alterações: com quebra e sem quebra. Todas as alterações de esquema são agrupadas em versões do Currents, e cada versão avança o segmento version=<currents_version> no caminho de armazenamento (por exemplo, de version=6 para version=7). Os eventos do Currents gravados no Azure Blob Storage, no Google Cloud Storage e no Amazon S3 usam o seguinte formato de caminho:

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

Alterações sem quebra

Quando um campo é adicionado ao esquema Avro, consideramos isso uma alteração sem quebra. Os campos adicionados sempre serão campos Avro “opcionais” (por exemplo, com um valor padrão de null), então eles vão “corresponder” aos esquemas mais antigos de acordo com a especificação de resolução de esquemas do Avro. Essas adições não devem afetar os processos existentes de extração, transformação e carregamento (ETL), já que o campo será simplesmente ignorado até ser adicionado ao seu processo de ETL.

Alterações com quebra

Quando um campo é removido ou alterado no esquema Avro, consideramos isso uma alteração com quebra. As alterações com quebra podem exigir modificações nos processos de ETL existentes, já que campos que estavam em uso podem não ser mais registrados como esperado.

Todas as alterações com quebra serão comunicadas antes do lançamento.

Para ver o histórico completo de alterações por versão, consulte o changelog do Currents.

New Stuff!