Compartilhar via


Referência do modo em tempo real

Esta página fornece informações de referência para o modo em tempo real no Streaming Estruturado, incluindo ambientes, idiomas, fontes, coletores e operadores com suporte. Para limitações conhecidas, consulte as limitações do modo em tempo real.

Idiomas com suporte

O modo em tempo real dá suporte a Scala, Java e Python.

Tipos de computação

O modo em tempo real dá suporte aos seguintes tipos de computação:

Tipo de computação Supported
Dedicado (anteriormente: usuário único)
Standard (anteriormente: compartilhado) ✓ (somente Python)
Lakeflow Spark Declarative Pipelines Classic (Pipelines Declarativas do Lakeflow Spark Classic) Sem suporte
Pipelines Declarativos do Lakeflow Spark sem servidor Sem suporte
Sem servidor Sem suporte

Modos de execução

O modo em tempo real dá suporte apenas ao modo de atualização:

Modo de execução Supported
Modo de atualização
modo de acréscimo Sem suporte
Modo completo Sem suporte

Fontes e coletores

O modo em tempo real dá suporte às seguintes fontes e coletores:

Origem ou coletor Como fonte Como coletor
Apache Kafka
Hubs de Eventos (usando o conector Kafka)
Kinesis ✓ (somente modo EFO) Sem suporte
AWS MSK Sem suporte
Delta Sem suporte Sem suporte
Google Pub/Sub Sem suporte Sem suporte
Apache Pulsar Sem suporte Sem suporte
Coletores arbitrários (usando forEachWriter) Não aplicável

Operadores

O modo em tempo real dá suporte à maioria dos operadores de Streaming Estruturados:

Operações sem estado

Operador Supported
Seleção
Projeção

UDFs

Operador Supported
Scala UDF ✓ (com algumas limitações)
Python UDF ✓ (com algumas limitações)

Agregação

Operador Supported
sum
contagem
max
min
avg
Funções de agregação

Windowing

Operador Supported
Rolamento
Deslizante
Sessão Sem suporte

Deduplicação

Operador Supported
dropDuplicates ✓ (o estado não está limitado)
dropDuplicatesWithinWatermark Sem suporte

Transmitir para a junção da tabela

Operador Supported
Junção da tabela de difusão (a tabela deve ser pequena)
Transmitir para transmitir junção Sem suporte
(achatado)MapGroupsWithState Sem suporte
transformWithState ✓ (com algumas diferenças)
união ✓ (com algumas limitações)
forEach
forEachBatch Sem suporte
mapPartitions Sem suporte (consulte limitação)

Considerações especiais

Alguns operadores e recursos têm considerações ou diferenças específicas quando usados no modo em tempo real.

transformWithState no modo em tempo real

Para criar aplicativos personalizados com estado, o Databricks oferece suporte a transformWithState, uma API no Streaming Estruturado do Apache Spark. Consulte Criar um aplicativo com estado personalizado para obter mais informações sobre a API e os snippets de código.

No entanto, há algumas diferenças entre como a API se comporta no modo em tempo real e as consultas de streaming tradicionais que aproveitam a arquitetura de microlote.

  • O modo em tempo real chama o método handleInputRows(key: String, inputRows: Iterator[T], timerValues: TimerValues) para cada linha.
    • O inputRows iterador retorna um único valor. O modo de micro-lote o chama uma vez para cada chave, e o inputRows iterador retorna todos os valores para uma chave no micro-lote.
    • Conta para essa diferença ao escrever seu código
  • Não há suporte para temporizadores de evento no modo em tempo real.
  • transformWithStateInPandas não há suporte no modo em tempo real. Em vez disso, use a API baseada transformWithState em linha, que usa Row objetos em vez de DataFrames pandas.
  • No modo em tempo real, os temporizadores são atrasados ao disparar dependendo da chegada dos dados:
    • Se um temporizador for agendado para 10:00:00, mas nenhum dado chegar, o temporizador não será acionado imediatamente.
    • Se os dados chegarem às 10:00:10, o temporizador será acionado com um atraso de 10 segundos.
    • Se nenhum dado chegar e o lote de execução longa estiver sendo encerrado, o temporizador será acionado antes que o lote seja encerrado.

Python UDFs no modo em tempo real

O Databricks dá suporte à maioria das UDFs (funções definidas pelo usuário) Python no modo em tempo real:

Sem estado

Tipo de UDF Supported
Python UDF escalar (funções escalares definidas por User - Python)
UDF escalar de seta
Funções UDF escalares do Pandas (funções definidas pelo usuário do Pandas)
Função Arrow (mapInArrow)
Função Pandas (Mapa)

Agrupamento com estado (UDAF)

Tipo de UDF Supported
transformWithState (somente Row interface)
transformWithStateInPandas Sem suporte. Em vez disso, use a API baseada transformWithState em linha, que usa Row objetos em vez de DataFrames pandas. Não hátransformWithStateInPandas suporte para obter detalhes.
applyInPandasWithState Sem suporte

Agrupamento sem estado (UDAF)

Tipo de UDF Supported
apply Sem suporte
applyInArrow Sem suporte
applyInPandas Sem suporte

Funções de tabela

Tipo de UDF Supported
UDTF (Python UDTFs (funções de tabela definidas pelo usuário)) Sem suporte
UC UDF Sem suporte

Há vários pontos a serem considerados ao usar Python UDFs no modo em tempo real:

  • Para minimizar a latência, configure o tamanho do lote do Arrow (spark.sql.execution.arrow.maxRecordsPerBatch) para 1.
    • Compensação: essa configuração otimiza a latência em detrimento da taxa de transferência. Para a maioria das cargas de trabalho, essa configuração é recomendada.
    • Aumente o tamanho do lote somente se uma taxa de transferência maior for necessária para acomodar o volume de entrada, aceitando o potencial aumento na latência.
  • As UDFs e as funções do Pandas não têm um bom desempenho com um tamanho de lote do Arrow de 1.
    • Se você utilizar UDFs ou funções com pandas, ajuste o tamanho de bloco do Arrow para um valor mais elevado (por exemplo, 100 ou mais).
    • Isso implica uma latência maior. O Databricks recomenda o uso de uma UDF ou função de seta, se possível.
  • transformWithStateInPandas não há suporte no modo em tempo real. Em vez disso, use a API baseada transformWithState em linha, que usa Row objetos em vez de DataFrames pandas. Consulte transformWithStateInPandas sem suporte e exemplos de modo Real-time para um exemplo de Python de trabalho usando a API baseada em linha.