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 | 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 | |
UDF em Python |
Agregação
Operador | Apoiado |
|---|---|
soma | ✓ |
contar | ✓ |
Máx | ✓ |
Mín | ✓ |
média | ✓ |
✓ |
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 | |
união | |
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
inputRowsretorna um único valor. O modo micro-lotes chama-o uma vez para cada key, e o iteradorinputRowsretorna todos os valores para uma key nos micro-lotes. - Leve em consideração essa diferença ao escrever seu código.
- O iterador
-
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 ( | ✓ |
Função Pandas (Mapa) | ✓ |
Agrupamento com estado (UDAF)
Tipo UDF | Apoiado |
|---|---|
| ✓ |
| Não suportado |
Agrupamento sem estado (UDAF)
Tipo UDF | Apoiado |
|---|---|
| Não suportado |
| Não suportado |
| 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.