Pular para o conteúdo principal

Referência do modo em tempo real

Esta página fornece informações de referência para o modo tempo real em transmissão estruturada, incluindo ambientes, linguagens, fontes, destinos e operadores suportados. Para limitações conhecidas, consulte Limitações do modo em tempo real.

Idiomas suportados

O modo em tempo real é compatível com Scala, Java e Python.

tipos de computação

O modo tempo real suporta os seguintes tipos compute :

Tipo de Compute

Apoiado

Dedicado (anteriormente: usuário único)

Padrão (anteriormente: compartilhado)

✓ (somente Python)

Pipeline declarativo LakeFlow Spark Clássico

Não suportado

LakeFlow Spark Declarative pipeline serverless

Não suportado

Serverless

Não suportado

Modos de execução

O modo em tempo real suporta apenas o modo de atualização:

Modo de execução

Apoiado

Modo de atualização

Modo de anexação

Não suportado

Modo completo

Não suportado

Fontes e sumidouros

O modo em tempo real suporta as seguintes fontes e destinos:

Fonte ou destino

Como fonte

Como pia

Apache Kafka

Hubs de eventos (usando o conector Kafka)

Kinesis

✓ (somente no modo EFO)

Não suportado

AWS MSK

Não suportado

Delta

Não suportado

Não suportado

Google Pub/Sub

Não suportado

Não suportado

Apache Pulsar

Não suportado

Não suportado

Sumidouros arbitrários (usando forEachWriter)

Não aplicável

Operadores

O modo tempo real suporta a maioria dos operadores de transmissão estruturada:

operações sem estado

Operador

Apoiado

Seleção

Projeção

UDFs

Operador

Apoiado

UDF Scala

✓ (com algumas limitações)

UDF em Python

✓ (com algumas limitações)

Agregação

Operador

Apoiado

soma

contar

Máx

Mín

média

Funções de agregação

Janelas

Operador

Apoiado

cambalhotas

Deslizando

Sessão

Não suportado

Desduplicação

Operador

Apoiado

remover duplicados

✓ (o estado é ilimitado)

removerDuplicadosDentroDaMarcaD'água

Não suportado

receita para joinà mesa

Operador

Apoiado

join tabela de transmissão (a tabela deve ser pequena)

transmissão para transmissão join

Não suportado

(plano)MapGroupsWithState

Não suportado

transformarComEstado

✓ (com algumas diferenças)

união

✓ (com algumas limitações)

para cada

paraCadaLote

Não suportado

mapPartições

Não suportado (ver limitação)

Considerações especiais

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

transformWithState em modo de tempo real

Para construir aplicações personalizadas com estado, Databricks suporta transformWithState, uma API em Apache Spark transmissão estruturada. Consulte Criar um aplicativo com estado personalizado para obter mais informações sobre a API e trechos de código.

No entanto, existem algumas diferenças entre o comportamento da API no modo tempo real e as consultas de transmissão tradicionais que utilizam a arquitetura de microlotes.

  • O modo em tempo real chama o método handleInputRows(key: String, inputRows: Iterator[T], timerValues: TimerValues) para cada linha.

    • O iterador inputRows retorna um único valor. O modo micro-lotes chama-o uma vez para cada key, e o iterador inputRows retorna todos os valores para uma key nos micro-lotes.
    • Leve em consideração essa diferença ao escrever seu código.
  • Temporizadores de eventos não são suportados no modo em tempo real.

  • No modo em tempo real, os temporizadores têm seu disparo atrasado dependendo da chegada dos dados:

    • Se um temporizador estiver 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.
    • Caso nenhum dado chegue e o lote de longa duração esteja sendo encerrado, o temporizador é acionado antes do término do lote.

UDFs em Python em modo de tempo real

O Databricks suporta a maioria das funções definidas pelo usuário (UDFs) do Python em modo de tempo real:

Apátrida

Tipo UDF

Apoiado

UDF escalar em Python (Funções escalares definidas pelo usuário - Python)

UDF escalar de seta

UDF escalar Pandas (funções definidas pelo usuárioPandas)

Função de seta (mapInArrow)

Função Pandas (Mapa)

Agrupamento com estado (UDAF)

Tipo UDF

Apoiado

transformWithState (somente interface Row )

applyInPandasWithState

Não suportado

Agrupamento sem estado (UDAF)

Tipo UDF

Apoiado

apply

Não suportado

applyInArrow

Não suportado

applyInPandas

Não suportado

Funções de tabela

Tipo UDF

Apoiado

UDTF (Funções de tabela definidas pelo usuário em Python (UDTFs))

Não suportado

UC UDF

Não suportado

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

  • Para minimizar a latência, configure o tamanho dos lotes Arrow (spark.sql.execution.arrow.maxRecordsPerBatch) para 1.

    • Contraponto: Esta 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 dos lotes somente se for necessária uma Taxa de transferência maior para acomodar o volume de entrada, aceitando o possível aumento na latência.
  • As UDFs e funções Pandas não apresentam bom desempenho com um tamanho de lote Arrow igual a 1.

    • Se você usar UDFs ou funções Pandas , defina o tamanho dos lotes do Arrow para um valor maior (por exemplo, 100 ou mais).
    • Isso implica maior latência. A Databricks recomenda o uso de uma UDF ou função Arrow, se possível.
  • Devido ao problema de desempenho com Pandas, transformWithState só é suportado com a interface Row .