Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Esta página descreve como escolher a configuração certa para cargas de trabalho de streaming serverless no Azure Databricks, incluindo pipelines contínuos, ingestão incremental e conectores geridos. A escolha da configuração certa depende da fonte, forma e necessidade de latência do fluxo.
O que conta como carga de trabalho de streaming
Uma carga de trabalho em streaming lê dados ilimitados de uma fonte (como armazenamento de objetos na cloud, um barramento de mensagens ou um feed de alterações) e escreve num sumidouro de forma incremental. O Azure Databricks suporta dois padrões de cargas de trabalho em streaming:
- Contínuo: Um pipeline que corre sem parar e processa novos dados à medida que chegam. A latência é medida em segundos.
- Incremental (também chamado de desencadeado): Um pipeline que corre com um calendário ou um gatilho, processa todos os dados que chegaram desde a última execução e para. A latência mede-se em minutos.
Algumas cargas de trabalho parecem ser pipelines de streaming, mas tecnicamente não são pipelines. Exemplos incluem um serviço que mantém um websocket aberto para ouvir eventos, uma aplicação de chat que mantém uma ligação persistente por utilizador, ou um recetor webhook que gere pedidos HTTP recebidos. Estas são aplicações, não cadeias de processamento em fluxo. Para a opção sem servidor adequada para essas cargas de trabalho, consulte Cargas de trabalho que não são pipelines de transmissão em fluxo.
Escolha a configuração de streaming certa
Esta tabela mapeia casos de uso para as configurações serverless que melhor se adequam a elas. As secções que se seguem nesta página fornecem mais detalhes sobre estas recomendações.
| Caso de uso | Configuração recomendada | Porquê |
|---|---|---|
| ETL em fluxo contínuo e de baixa latência ou transformações em fluxo contínuo e de baixa latência | Lakeflow Spark Declarative Pipelines em modo contínuo | O modo contínuo é concebido para streams sempre ativos. O pipeline em fluxo executa microlotes em simultâneo, aumentando a taxa de transferência e reduzindo a latência. O estado gerido mantém a recuperação automática. |
| Ingestão incremental a partir do armazenamento na nuvem | Utilize o Auto Loader em pipelines declarativos do Lakeflow Spark (para baixa latência) ou numa tarefa sem servidor com Trigger.AvailableNow() (se uma latência mais elevada for aceitável). |
O Auto Loader regista os novos ficheiros de forma eficiente.
Trigger.AvailableNow() processa o backlog e depois encerra, o que se encaixa numa cadência programada ou sob demanda. |
| Ingestão gerida a partir de fontes SaaS ou base de dados CDC | Conectores padrão no Lakeflow Connect | Conectores totalmente geridos com fluxos de ingestão sem servidor. Não é necessário código para fontes suportadas. |
| Streaming SQL sobre tabelas Delta | Tabelas de streaming | Processamento incremental nativo de SQL para fontes orientadas para acréscimo, com pipelines geridos e atualização. |
| Processamento periódico em micro-lotes num notebook ou numa tarefa |
Trabalho sem servidor com Trigger.AvailableNow() |
Eficiente em termos de custos quando a frescura ao nível do minuto é suficiente. A computação sem servidor arranca rapidamente e é encerrada quando o lote termina. |
Transmissão contínua
Para transmissão contínua em ambiente de computação serverless, utilize Lakeflow Spark Declarative Pipelines no modo contínuo. O pipeline mantém-se a funcionar, processa os registos à medida que chegam e recupera automaticamente das falhas.
Para configurar um fluxo contínuo:
- Configura o pipeline como serverless. Consulte Configurar um pipeline sem servidor.
- Defina o modo do pipeline para contínuo. Consulte Modo de fluxo de trabalho acionado versus contínuo.
- Utilize tabelas de streaming para resultados mantidos de forma incremental.
Tip
O processamento em pipeline de fluxos está ativado por predefinição no Lakeflow Spark Declarative Pipelines serverless. Os microlotes são executados em simultâneo, em vez de de forma sequencial, o que melhora a taxa de transferência em fluxos com ingestão intensiva.
Os acionadores de transmissão estruturada baseados no tempo, como Trigger.ProcessingTime(interval) e Trigger.Continuous(interval), não estão disponíveis em notebooks sem servidor ou tarefas. Utilize o Lakeflow Spark Declarative Pipelines em modo contínuo para o padrão permanentemente ativo. Consulte Limitações de streaming.
Trigger.Once() é suportado mas está obsoleto — migre consultas existentes para Trigger.AvailableNow().
Transmissão incremental e acionada
Para processamento em fluxo incremental, execute o Structured Streaming numa tarefa serverless com Trigger.AvailableNow(). Cada execução processa todos os dados que chegaram desde o último ponto de verificação e depois sai.
Para configurar uma tarefa sem servidor com fluxo incremental:
- Agende o trabalho ao ritmo que precisas. Consulte Executar trabalhos numa programação.
- Utilize
Trigger.AvailableNow()em todas as consultas de streaming no trabalho. Consulte Configurar intervalos de ativação do Streaming Estruturado. - Ajuste o tamanho do lote com
maxFilesPerTriggeroumaxBytesPerTriggerpara manter a memória previsível. Consulte Melhores práticas para computação sem servidor.
O exemplo seguinte lê novos ficheiros a partir do armazenamento na nuvem (source_path) com Auto Loader, processa todos os dados disponíveis no momento da execução e escreve numa 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"))
Uma tarefa agendada Trigger.AvailableNow() é o padrão de streaming com melhor relação custo-eficiência em computação sem servidor quando uma latência da ordem de um minuto é aceitável. O cálculo começa em segundos, executa o lote e desliga-se.
Ingestão controlada
Se a fonte for uma aplicação SaaS ou uma base de dados operacional, use o Lakeflow Connect em vez de escrever código Structured Streaming. O Lakeflow Connect opera pipelines de ingestão sem servidor para conectores como Salesforce, Workday, SQL Server CDC e PostgreSQL CDC. Consulte Conectores gerenciados no Lakeflow Connect.
Este caminho é a resposta certa quando:
- Existe um conector para a sua fonte.
- Queres um pipeline gerido em vez de código personalizado.
- Precisas de evolução de esquemas, linhagem e monitorização logo de fábrica.
Processamento incremental de dados gerido por SQL
Para equipas orientadas para SQL, utilize tabelas de streaming para cargas de trabalho de streaming nativas em SQL. Pode definir tabelas de streaming dentro dos Lakeflow Spark Declarative Pipelines ou como tabelas de streaming independentes.
Para tabelas de streaming autónomas criadas com a CREATE OR REFRESH STREAMING TABLE instrução SQL, a atualização inicial dos dados e a população começam imediatamente. Um pipeline dedicado sem servidor é criado e gerenciado automaticamente pelo sistema para cada tabela de streaming.
Se precisares de resultados de consultas semânticas em lote com atualização gerida, usa vistas materializadas em vez disso. Ver Vistas materializadas.
Cargas de trabalho que não são pipelines de streaming
Uma carga de trabalho que precisa de manter uma ligação persistente, ouvir numa porta ou responder a pedidos HTTP de entrada não é um pipeline de streaming; é uma aplicação. Não execute estas cargas de trabalho numa tarefa sem servidor. As opções corretas do Databricks são:
- Serviços de longa duração que necessitam de uma ligação persistente ou de um endpoint HTTP: Construa o serviço com aplicações Databricks. O Databricks Apps é a plataforma serverless para alojar aplicações personalizadas no Azure Databricks, incluindo aplicações FastAPI, Flask, Streamlit, Dash, Gradio, Node.js e Shiny. Consulte Aplicativos Databricks.
- Webhooks de entrada ou processadores de eventos: Expor um endpoint HTTP em Databricks Apps ou processar o webhook num serviço externo e gravar os eventos em armazenamento na cloud ou num barramento de mensagens, captando-os depois através de um pipeline de streaming sem servidor.
- Troca personalizada de token ou credenciais: Utilize identidades de serviço com OAuth ou invoque as APIs REST do Databricks a partir de uma aplicação. Os pipelines de streaming não mantêm sessões por utilizador nem estados personalizados de tokens.
Se está a avaliar se a sua carga de trabalho se encaixa num pipeline de streaming, pergunte:
- A carga de trabalho lê de uma fonte de dados ilimitada e escreve num sumidouro? Se sim, trata-se de um pipeline de transmissão em fluxo.
- A carga de trabalho precisa de manter uma ligação aberta a um cliente? Se sim, é uma aplicação; use Databricks Apps.
Limitações
A computação serverless impõe as seguintes restrições de streaming. Nenhuma delas impede as cargas de trabalho acima quando combinadas com o produto certo.
- Os acionadores do Streaming Estruturado baseados no tempo (
Trigger.ProcessingTime(interval)eTrigger.Continuous(interval)) não são suportados em notebooks sem servidor nem em tarefas. Utilize os Lakeflow Spark Declarative Pipelines em modo contínuo para fluxos sempre ativos, ouTrigger.AvailableNow()para execuções acionadas. Consulte Limitações de streaming. - Consultas de streaming sem um gatilho explícito falham com
INFINITE_STREAMING_TRIGGER_NOT_SUPPORTED. O Apache Spark utiliza por defeitoTrigger.ProcessingTime("0 seconds"), o que não é suportado na computação serverless. DefinaTrigger.AvailableNow()sempre para cada consulta de streaming, ou use Lakeflow Spark Declarative Pipelines em modo contínuo. - Todas as limitações para streaming em modo de acesso padrão também se aplicam à computação serverless. Consulte Limitações de streaming.
Passos seguintes
- Configurar uma canalização sem servidor
- Executar Lakeflow Jobs em computação sem servidor
- Explore conectores geridos na Lakeflow Connect