Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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
inputRowsiterador retorna um único valor. O modo de micro-lote o chama uma vez para cada chave, e oinputRowsiterador retorna todos os valores para uma chave no micro-lote. - Conta para essa diferença ao escrever seu código
- O
- Não há suporte para temporizadores de evento no modo em tempo real.
-
transformWithStateInPandasnão há suporte no modo em tempo real. Em vez disso, use a API baseadatransformWithStateem linha, que usaRowobjetos 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.
-
transformWithStateInPandasnão há suporte no modo em tempo real. Em vez disso, use a API baseadatransformWithStateem linha, que usaRowobjetos em vez de DataFrames pandas. ConsultetransformWithStateInPandassem suporte e exemplos de modo Real-time para um exemplo de Python de trabalho usando a API baseada em linha.