Partilhar via


Processamento de dados em lote versus streaming no Azure Databricks

Este artigo descreve as principais diferenças entre lote e streaming, duas semânticas de processamento de dados diferentes usadas para cargas de trabalho de engenharia de dados, incluindo ingestão, transformação e processamento em tempo real.

O streaming é comumente associado a baixa latência e processamento contínuo de barramentos de mensagens, como o Apache Kafka.

No entanto, no Azure Databricks ele tem uma definição mais expansiva. O mecanismo subjacente do Lakeflow Declarative Pipelines (Apache Spark e Structured Streaming) tem uma arquitetura unificada para processamento em lote e streaming:

  • O mecanismo pode tratar fontes como armazenamento de objetos em nuvem e Delta Lake como fontes de streaming para processamento incremental eficiente.
  • O processamento de streaming pode ser executado de forma acionada e contínua, dando-lhe a flexibilidade de controlar as compensações de custo e desempenho para suas cargas de trabalho de streaming.

Abaixo estão as diferenças semânticas fundamentais que distinguem lote e streaming, incluindo suas vantagens e desvantagens, e considerações para escolhê-los para suas cargas de trabalho.

Semântica em lote

Com o processamento em lote, o mecanismo não controla quais dados já estão sendo processados na fonte. Todos os dados atualmente disponíveis na fonte são processados no momento do processamento. Na prática, uma fonte de dados em lote normalmente é particionada logicamente, por exemplo, por dia ou região, para limitar o reprocessamento de dados.

Por exemplo, o cálculo do preço médio de venda do item, agregado em uma granularidade horária, para um evento de vendas executado por uma empresa de comércio eletrônico pode ser agendado como processamento em lote para calcular o preço médio de venda a cada hora. No processamento em lotes, os dados das horas anteriores são reprocessados a cada hora, e os resultados calculados anteriormente são sobrescritos para refletir os últimos resultados.

Processamento em lote

Semântica de streaming

Com o processamento de streaming, o mecanismo controla quais dados estão sendo processados e só processa novos dados em execuções subsequentes. No exemplo acima, você pode agendar o processamento de streaming em vez do processamento em lote para calcular o preço médio de venda a cada hora. Com o streaming, apenas novos dados adicionados à fonte desde a última execução são processados. Os resultados recém-calculados devem ser anexados aos resultados calculados anteriormente para verificar os resultados completos.

Processamento de streaming

Processamento em lote vs. streaming

No exemplo acima, o streaming é melhor do que o processamento em lote porque não processa os mesmos dados processados em execuções anteriores. No entanto, o processamento de streaming fica mais complexo com cenários como dados fora de ordem e chegada tardia na fonte.

Um exemplo de dados de chegada tardia é se alguns dados de vendas da primeira hora não chegarem à fonte até a segunda hora:

  • No processamento em lote, os dados de chegada tardia da primeira hora serão processados com dados da segunda hora e dados existentes da primeira hora. Os resultados anteriores da primeira hora serão substituídos e ajustados de acordo com os dados de chegadas posteriores.
  • No processamento de streaming, os dados que chegam atrasados da primeira hora serão processados separadamente dos outros dados da primeira hora que já foram processados. A lógica de processamento deve armazenar as informações de soma e contagem dos cálculos de média da primeira hora para atualizar corretamente os resultados anteriores.

Essas complexidades de streaming geralmente são introduzidas quando o processamento é stateful, como junções, agregações e desduplicações.

Para o processamento de streaming sem estado, como anexar novos dados da fonte, o tratamento de dados fora de ordem e de chegada tardia é menos complexo, pois os dados que chegam atrasados podem ser anexados aos resultados anteriores à medida que os dados chegam da fonte.

A tabela abaixo descreve os prós e contras do processamento em lote e streaming e os diferentes recursos do produto que suportam essas duas semânticas de processamento no Databricks Lakeflow.

Lote Transmissão
Vantagens
  • A lógica de processamento é simples.
  • Os resultados são sempre precisos e refletem todos os dados disponíveis na fonte.
  • Eficiente, apenas novos dados são processados.
  • Mais rápido, pode lidar com requisitos de latência de horas a minutos, segundos e milissegundos.
Desvantagens
  • Não é tão eficiente; Os dados serão reprocessados em uma partição em lote específica.
  • Mais lento, pode lidar com requisitos de latência de horas a minutos, mas não segundos ou milissegundos.
  • A lógica de processamento pode ser complexa, especialmente para processamento com monitoração de estado, como junções, agregações, desduplicações, etc.
  • Os resultados nem sempre podem ser precisos, considerando dados fora de ordem e chegada tardia.
Produtos de engenharia de dados

Recomendações

A tabela abaixo descreve a semântica de processamento recomendada com base nas características das cargas de trabalho de processamento de dados em cada camada da arquitetura medalhão.

Camada de medalhão Características da carga de trabalho Recomendação
Bronze
  • Cargas de trabalho de ingestão.
  • Normalmente, não envolve processamento ou envolve processamento sem estado para acréscimo incremental a partir de fontes de dados.
  • O tamanho dos dados é normalmente maior.
  • O processamento de streaming é geralmente uma escolha melhor, dado que os usuários podem se beneficiar das vantagens do streaming, mas não ficar expostos às complexidades do processamento de streaming stateful.
Prata
  • Cargas de trabalho de transformação.
  • Normalmente envolve processamento sem monitoração de estado, como filtragem, e processamento com monitoração de estado, como junções, agregações e desduplicações.
  • Use o processamento em lote (com atualização incremental em exibições materializadas) para evitar as complexidades do processamento de streaming com monitoração de estado.
  • Use o processamento de streaming como uma opção para casos de uso em que a eficiência e a latência são muito mais importantes do que a precisão dos resultados. Esteja atento às complexidades introduzidas pelo processamento de streaming stateful.
Ouro
  • Tarefas de agregação de última milha.
  • Normalmente envolve processamento com estado, como junções e agregações.
  • O tamanho dos dados é geralmente menor.
  • Use o processamento em lote (com atualização incremental em exibições materializadas) para evitar as complexidades do processamento de streaming com monitoração de estado.