Referência 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 compatível (ver observação abaixo) |
LakeFlow Spark Declarative pipeline serverless | Não compatível (ver observação abaixo) |
Serverless | Não suportado |
Modo em tempo real não é suportado como um tipo de acionador direto de transmissão estructurada dentro do Lakeflow Spark Declarative Pipelines. No entanto, o LakeFlow Spark Declarative Pipelines suporta o modo em tempo real por meio da configuração em nível de pipeline. Consulte Use o modo em tempo real em LakeFlow Spark Declarative Pipelines.
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 | 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, a API comporta-se de forma diferente no modo de tempo real do que em consultas de micro-lotes.
-
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.
-
transformWithStateInPandasNão é compatível com o modo em tempo real. Use a API baseada em linhastransformWithStateem vez disso, que usa objetosRowem 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.
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 ( | ✓ |
Função Pandas (Mapa) | ✓ |
Agrupamento com estado (UDAF)
Tipo UDF | Apoiado |
|---|---|
| ✓ |
| Não suportado. Use a API baseada em linhas |
| 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, defina o tamanho do lote 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.
-
transformWithStateInPandasNão é compatível com o modo em tempo real. Use a API baseada em linhastransformWithStateem vez disso, que usa objetosRowem vez de DataFrames Pandas . ConsultetransformWithStateInPandasnã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.