Compartilhar via


Processamento de dados em lote versus streaming no Azure Databricks

Este artigo descreve as principais diferenças entre o lote e o 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 geralmente é associado à baixa latência e ao 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 Spark Declarative Pipelines (Apache Spark e Streaming Estruturado) tem uma arquitetura unificada para processamento em lote e streaming:

  • O mecanismo pode tratar fontes como armazenamento de objetos de nuvem e Delta Lake como fontes de streaming para processamento incremental eficiente.
  • O processamento de streaming pode ser executado de maneira pontual e contínua, dando a você a flexibilidade para controlar o equilíbrio entre custo e desempenho para suas cargas de trabalho de streaming.

Abaixo estão as diferenças semânticas fundamentais que distinguem o processamento em lote e o processamento em fluxo, incluindo suas vantagens e desvantagens, e considerações para a escolha entre elas para suas cargas de trabalho.

Semântica de processamento em lote

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

Por exemplo, calcular o preço médio de venda de itens, agregado em uma granularidade por hora, 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 vendas a cada hora. No processamento em lote, os dados das horas anteriores são reprocessados a cada hora, e os resultados calculados anteriormente são substituídos para refletir os resultados mais recentes.

Processamento em lote

Semântica de streaming

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

Processamento de streaming

Lote versus transmissão contínua

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

Um exemplo de dados de chegada tardia é se alguns dados de vendas da primeira hora não chegarem à origem 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 corrigidos com os dados que chegaram tardiamente.
  • No processamento de streaming, os dados de chegada tardia da primeira hora serão processados sem os demais 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 da média da primeira hora para atualizar corretamente os resultados anteriores.

Essas complexidades de streaming normalmente são introduzidas quando o processamento é stateful, como joins, agregações e deduplicações.

Para o processamento de streaming sem estado, como acrescentar novos dados da origem, lidar com dados fora de ordem e de chegada tardia é menos complexo, pois os dados de chegada tardia podem ser acrescentados aos resultados anteriores à medida que os dados chegam na origem.

A tabela a seguir descreve os prós e contras do processamento em lote e streaming e os diferentes recursos do produto que dão suporte a essas duas semânticas de processamento no Databricks Lakeflow.

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

Recomendações

A tabela a seguir 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 de medalhão.

Camada de medalhão Características da carga de trabalho Recomendação
Bronze
  • Tarefas de ingestão.
  • Normalmente, não envolve nenhum processamento sem estado para acréscimo incremental 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 serem expostos às complexidades do processamento de streaming com estado.
Prata
  • Cargas de trabalho de transformação.
  • Normalmente envolve tanto processamento sem estado, como filtragem, quanto processamento com estado, como junções, agregações e deduplicações.
  • Use o processamento em lote (com atualização incremental em exibições materializadas) para evitar as complexidades do processamento de streaming com 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 com manutenção de estado.
Ouro
  • Cargas de trabalho de agregação na última etapa.
  • Normalmente envolve processamento com manutenção de 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 estado.