Pular para o conteúdo principal

Transmissão em compute serverless

Esta página descreve como escolher a configuração certa para cargas de trabalho de transmissão serverless no Databricks, incluindo pipelines contínuos, ingestão incremental e conectores gerenciados. A escolha da configuração correta depende da origem da transmissão, do formato e das necessidades de latência.

O que é considerado uma carga de trabalho de transmissão​

Uma carga de trabalho de transmissão lê dados ilimitados de uma fonte (como armazenamento de objetos em cloud, um barramento de mensagens ou um feed de alterações) e grava em um coletor de forma incremental. O Databricks oferece compatibilidade com os seguintes padrões de cargas de trabalho de transmissão:

  • Contínuo : Um pipeline que é executado sem parar e processa novos dados à medida que eles chegam, para cargas de trabalho com requisitos de frescor medidos em segundos ou minutos.
  • Tempo real : um pipeline contínuo que processa registros com latência de menos de um segundo para cargas de trabalho operacionais suportadas. Em serverless, o modo em tempo real está disponível em LakeFlow Pipelines. O modo em tempo real no Structured Streaming requer compute.
  • Incremental (também chamado de acionado): Um pipeline que é executado em uma programação ou um gatilho, processa todos os dados que chegaram desde a última execução e para. A latência é medida em minutos.

Algumas cargas de trabalho parecem ser pipelines de transmissão, mas não são tecnicamente pipelines. Exemplos incluem um serviço que mantém um websocket aberto para ouvir eventos, um aplicativo de chat que mantém uma conexão persistente por usuário, ou um receptor de webhook que lida com requisições HTTP de entrada. Estas são aplicações, não pipelines de transmissão. Para a opção serverless certa para essas cargas de trabalho, consulte Cargas de trabalho que não são pipelines de transmissão.

Escolha a configuração de transmissão correta​

Esta tabela mapeia os casos de uso para as configurações serverless que melhor se adequam a eles. As seções a seguir nesta página fornecem informações mais detalhadas sobre estas recomendações.

Caso de uso

Configuração recomendada

Por quê?

ETL de transmissão contínua de baixa latência ou transformações

Lakeflow pipelines no modo contínuo

O modo contínuo é projetado para transmissões sempre ativas. Pipelines de transmissão executam microlotes simultaneamente, melhorando a taxa de transferência e a latência. O estado gerenciado mantém a recuperação automática.

Processamento operacional que requer latência de sub-segundo

Modo em tempo real em LakeFlow Pipelines em compute Serverless

O modo em tempo real processa registros à medida que chegam em lotes de longa execução. Verifique os requisitos de runtime, fonte, destino e operador.

Ingestão incremental do armazenamento na nuvem

Use o Auto Loader dentro do Lakeflow pipelines (para baixa latência) ou em um job serverless com Trigger.AvailableNow() (se uma latência maior for aceitável).

O Auto Loader rastreia novos arquivos com eficiência. Trigger.AvailableNow() processa o backlog de dados, e em seguida é encerrado, o que se adapta a uma cadência agendada ou sob demanda.

Ingestão gerenciada de fontes SaaS ou CDC de banco de dados

Conectores gerenciados do Lakeflow Connect

Conectores totalmente gerenciados com pipelines de ingestão serverless. Nenhum código é necessário para fontes compatíveis.

Transmissão SQL sobre tabelas Delta

Tabelas de streaming

Processamento incremental nativo de SQL para fontes orientadas a anexação, com pipelines gerenciados e refresh.

Processamento periódico de micro-lotes em um Notebook ou Job

job serverless com Trigger.AvailableNow()

Econômico quando a atualização a nível de minuto é suficiente. Compute serverless começa rapidamente e é encerrado quando o lote é concluído.

Caso de uso

Configuração recomendada

Por quê?

ETL de transmissão contínua de baixa latência ou transformações

Lakeflow pipelines no modo contínuo

O modo contínuo é projetado para transmissões sempre ativas. Pipelines de transmissão executam microlotes simultaneamente, melhorando a taxa de transferência e a latência. O estado gerenciado mantém a recuperação automática.

Processamento operacional que requer latência de sub-segundo

Modo em tempo real em LakeFlow Pipelines em compute Serverless

O modo em tempo real processa registros à medida que chegam em lotes de longa execução. Verifique os requisitos de runtime, fonte, destino e operador.

Ingestão incremental do armazenamento na nuvem

Use o Auto Loader dentro do Lakeflow pipelines (para baixa latência) ou em um job serverless com Trigger.AvailableNow() (se uma latência maior for aceitável).

O Auto Loader rastreia novos arquivos com eficiência. Trigger.AvailableNow() processa o backlog de dados, e em seguida é encerrado, o que se adapta a uma cadência agendada ou sob demanda.

Ingestão gerenciada de fontes SaaS ou CDC de banco de dados

Conectores gerenciados do Lakeflow Connect

Conectores totalmente gerenciados com pipelines de ingestão serverless. Nenhum código é necessário para fontes compatíveis.

Transmissão SQL sobre tabelas Delta

Tabelas de streaming

Processamento incremental nativo de SQL para fontes orientadas a anexação, com pipelines gerenciados e refresh.

Processamento periódico de micro-lotes em um Notebook ou Job

job serverless com Trigger.AvailableNow()

Econômico quando a atualização a nível de minuto é suficiente. Compute serverless começa rapidamente e é encerrado quando o lote é concluído.

Transmissão contínua​

Para transmissão contínua em serverless compute, use Lakeflow pipelines no modo contínuo. O pipeline permanece em execução, processa os registros à medida que chegam e se recupera automaticamente de falhas.

Para configurar uma transmissão contínua:

dica

Pipelining de transmissão está habilitado por default em pipelines Serverless do LakeFlow. Microbatches executam simultaneamente em vez de sequencialmente, o que melhora o throughput para transmissões com muita ingestão.

Os Triggers de Structured Streaming baseados em tempo, como Trigger.ProcessingTime(interval) e Trigger.Continuous(interval), não estão disponíveis em Notebooks ou Jobs Serverless. Use LakeFlow Pipelines no modo contínuo para o padrão sempre ativo. Consulte Limitações de transmissão. Trigger.Once() é compatível, mas descontinuado. Migre as queries existentes para Trigger.AvailableNow().

Transmissão em tempo real​

O modo em tempo real nos LakeFlow Pipelines oferece suporte a cargas de trabalho operacionais de sub-segundo, como detecção de fraudes e personalização em tempo real. Está disponível no compute classic e serverless. Configure um fluxo de atualização com um coletor compatível e revise os requisitos de runtime e operador. Os fluxos de atualização em tempo real não podem gravar em tabelas Delta Lake.

O modo de pipeline contínuo e o modo em tempo real atendem a requisitos de latência diferentes. Ativar o modo contínuo por conta própria não ativa o modo em tempo real.

Transmissão incremental e com trigger​

Para transmissão incremental, execute transmissão estructurada com Trigger.AvailableNow() em um Job serverless. Cada execução processa todos os dados que chegaram desde o último ponto de verificação e depois é encerrada.

Para configurar um job serverless com transmissão incremental:

O exemplo a seguir lê novos arquivos do armazenamento em nuvem (source_path) com o Auto Loader, processa todos os dados disponíveis no momento da execução e grava em uma tabela Delta:

Python
(spark.readStream
.format("cloudFiles")
.option("cloudFiles.format", "json")
.option("cloudFiles.maxFilesPerTrigger", 1000)
.load(source_path)
.writeStream
.trigger(availableNow=True)
.option("checkpointLocation", checkpoint_path)
.toTable("catalog.schema.target_table"))

Um Trigger.AvailableNow() job agendado é o padrão de transmissão mais econômico em compute serverless quando uma latência em nível de minuto é aceitável. Compute começa em segundos, executa os lotes e desliga.

Ingestão gerenciada​

Se a origem for um aplicativo SaaS ou um banco de dados operacional, use o Lakeflow Connect em vez de escrever código de Structured Streaming. O Lakeflow Connect executa pipelines de ingestão serverless para conectores como Salesforce, Workday, SQL Server CDC e PostgreSQL CDC. Consulte Conceitos de conectores do Lakeflow Connect.

Este caminho é a resposta correta quando:

  • Um conector existe para sua fonte.
  • É preferível um pipeline gerenciado em vez de código personalizado.
  • Você precisa de recursos integrados de evolução de esquema, linhagem e monitoramento.

Processamento incremental de dados gerenciado por SQL​

Para equipes que priorizam SQL, use tabelas de transmissão para cargas de trabalho de transmissão nativas de SQL. Você pode definir tabelas de transmissão dentro de LakeFlow pipelines ou como tabelas de transmissão autônomas.

Para tabelas de transmissão autônomas criadas com a declaração SQL CREATE OR REFRESH STREAMING TABLE, o refresh inicial dos dados e o preenchimento começam imediatamente. Um pipeline serverless dedicado é automaticamente criado e gerenciado pelo sistema para cada tabela de transmissão.

Caso precise de resultados de query com semântica de lotes e refresh gerenciado, utilize visualizações materializadas. Consulte Visualizações materializadas.

Cargas de trabalho que não são pipelines de transmissão​

Uma carga de trabalho que precisa manter uma conexão de longa duração, ouvir em uma porta ou responder a requisições HTTP de entrada não é um pipeline de transmissão; é uma aplicação. Não execute estas cargas de trabalho em um job serverless. As configurações corretas do Databricks são:

  • Serviços de longa duração que precisam de uma conexão persistente ou endpoint HTTP : Crie o serviço com o Databricks Apps. O Databricks Apps é a plataforma serverless para hospedar aplicativos personalizados no Databricks, incluindo FastAPI, Flask, Streamlit, Dash, Gradio, Node.js e aplicativos Shiny. See Databricks Apps.
  • Webhooks de entrada ou ouvintes de eventos : Exponha um endpoint HTTP no Databricks Apps ou encerre o webhook em um serviço externo e grave eventos no armazenamento em cloud ou em um barramento de mensagens; em seguida, colete-os com um pipeline de transmissão serverless.
  • Troca personalizada de tokens ou credenciais : Use entidades de serviço com OAuth, ou chame as APIs REST do Databricks a partir de um aplicativo. Pipelines de transmissão não mantêm sessões por usuário ou estado de token personalizado.

Se estiver avaliando se sua carga de trabalho se encaixa em um pipeline de transmissão, pergunte:

  • A carga de trabalho lê de uma fonte de dados ilimitada e grava em um coletor? Se sim, é um pipeline de transmissão.
  • A carga de trabalho precisa manter uma conexão aberta com um cliente? Caso afirmativo, é um aplicativo; use o Databricks Apps.

Limitações​

As seguintes restrições de transmissão se aplicam a notebooks e jobs serverless. Para requisitos e limitações de pipeline, consulte Configurar um pipeline Serverless e Usar o modo de tempo real em LakeFlow Pipelines.

  • Triggers de Structured Streaming baseados em tempo (Trigger.ProcessingTime(interval) e Trigger.Continuous(interval)) não têm suporte em notebooks ou jobs serverless. Use LakeFlow Pipelines no modo contínuo para transmissões sempre ativas, ou Trigger.AvailableNow() para execuções acionadas. Consulte Limitações de transmissão.
  • Queries de transmissão sem um Trigger explícito falham com INFINITE_STREAMING_TRIGGER_NOT_SUPPORTED. Apache Spark usa por default Trigger.ProcessingTime("0 seconds"), o que não é suportado em compute serverless. Sempre defina Trigger.AvailableNow() em cada query de transmissão, ou use os LakeFlow Pipelines em modo contínuo.
  • Todas as limitações para transmissão no modo de acesso padrão também se aplicam a compute serverless. Consulte limitações de transmissão.

Passos seguintes​