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 | O Auto Loader rastreia novos arquivos com eficiência. |
Ingestão gerenciada de fontes SaaS ou CDC de banco de dados | Conectores totalmente gerenciados com pipelines de ingestão serverless. Nenhum código é necessário para fontes compatíveis. | |
Transmissão SQL sobre tabelas Delta | 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 | 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:
- Configurar o pipeline como serverless. Veja Configurar pipeline serverless.
- Defina o modo do pipeline como contínuo. Consulte Modo Pipeline Acionado vs. Contínuo.
- Use tabelas de transmissão para saídas mantidas de forma incremental.
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:
- Programe o Job na cadência necessária. Consulte Execute Jobs para programar.
- Utilize
Trigger.AvailableNow()em cada consulta de transmissão no Job. Consulte Configurar intervalos de trigger de Transmissão estructurada. - Ajustar o tamanho do lote com
maxFilesPerTriggeroumaxBytesPerTriggerpara manter a memória previsível. Consulte Melhores práticas para serverless compute.
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:
(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)eTrigger.Continuous(interval)) não têm suporte em notebooks ou jobs serverless. Use LakeFlow Pipelines no modo contínuo para transmissões sempre ativas, ouTrigger.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 defaultTrigger.ProcessingTime("0 seconds"), o que não é suportado em compute serverless. Sempre definaTrigger.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
- Configurar uma pipeline serverless
- Executar jobs do LakeFlow com compute serverless
- Explore conceitos de conector do Lakeflow Connect