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

Para cargas de trabalho sensíveis à latência com UDFs (Funções Definidas pelo Usuário), a Databricks recomenda o uso do modo de acesso dedicado. Consulte as funções da tabela.

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.

  • transformWithStateInPandas Não é compatível com o modo em tempo real. Use a API baseada em linhas transformWithState em vez disso, que usa objetos Row em vez de DataFrames Pandas .

  • 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.
nota

No Databricks Runtime 18.1 e versões anteriores, se você usar transformWithState e o modo de tempo real para Python com baixa taxa de transferência, menos de 5 registros por segundo, poderá observar um aumento na latência de até algumas centenas de milissegundos. Databricks recomenda a atualização para Databricks Runtime 18.2 ou superior para resolver o problema.

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 )

transformWithStateInPandas

Não suportado. Use a API baseada em linhas transformWithState em vez disso, que usa objetos Row em vez de DataFrames Pandas . Veja transformWithStateInPandas não suportado para detalhes.

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.
  • transformWithStateInPandas Não é compatível com o modo em tempo real. Use a API baseada em linhas transformWithState em vez disso, que usa objetos Row em vez de DataFrames Pandas . Consulte transformWithStateInPandas não suportado e exemplos de modo em tempo real para um exemplo funcional em Python usando a API baseada em linhas.

  • Para cargas de trabalho sensíveis à latência com UDFs (Funções Definidas pelo Usuário), a Databricks recomenda o uso do modo de acesso dedicado. No modo de acesso padrão, a sobrecarga do isolamento de segurança pode tornar o desempenho UDF mais lento.