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 descreve suporte para consultas em modo em tempo real que utilizam diretamente as APIs de Streaming Estruturado. Para pipelines gerenciados, veja o modo em tempo real nos pipelines Lakeflow, que possui requisitos separados de tempo de execução, fonte, sumidouro e operador.
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) |
| Pipelines lakeflow no clássico | Suportado por meio da configuração do pipeline |
| Pipelines do Lakeflow sem servidor | Suportado por meio da configuração do pipeline |
| Notebooks e trabalhos sem servidor | Não suportado para consultas diretas de Streaming Estruturado em tempo real |
Para cargas de trabalho sensíveis à latência com UDFs, o Databricks recomenda que você use o modo de acesso dedicado. Consulte as funções de Tabela.
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 | ✓ (modo EFO recomendado; polling no Databricks Runtime 19 e superior) | 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 | ✓ |
mapPartitions |
Sem suporte (consulte limitação) |
| Union | ✓ (com algumas limitações) |
UDFs
| Operador | Supported |
|---|---|
| Scala UDF | ✓ (com algumas limitações) |
| UDF Python | ✓ (com algumas limitações) |
Agregação
| Função | 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 | ✓ |
| dropDuplicatesWithinWatermark | ✓ |
Transmitir para a junção da tabela
| Operador | Supported |
|---|---|
| Junção interna | ✓ |
| Junção Externa | ✓ |
| Junção de tabela de difusão (tamanho da tabela de 10 mb ou menos) | ✓ |
| Ingresso na tabela (sem difusão) | Sem suporte |
Transmitir para transmitir junção
| Operador | Supported |
|---|---|
| Junção interna | ✓ (Databricks Runtime 18 LTS e superior, com algumas configurações) |
| Junção externa | Sem suporte |
Note
Para usar o fluxo para transmitir junções no modo em tempo real, você deve definir configurações adicionais do Spark. Para obter mais informações sobre as configurações e os requisitos para executar vários fluxos, consulte Stream para transmitir junções.
Operador com estado arbitrário
| Operador | Supported |
|---|---|
| (achatado)MapGroupsWithState | Sem suporte |
| transformWithState | ✓ (com algumas diferenças) |
Coletores definidos pelo usuário
| Coletor | Supported |
|---|---|
| forEach | ✓ |
| forEachBatch | Sem suporte |
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. Veja Construir uma aplicação personalizada com estado para transformWithState mais informações sobre a API e trechos de código.
No entanto, a API se comporta de forma diferente no modo em tempo real do que em consultas 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.
Note
No Databricks Runtime 18.1 e abaixo, se você usar transformWithState e modo em tempo real para Python com baixa taxa de transferência, menos de 5 registros por segundo, poderá ver latências maiores de até algumas centenas de milissegundos. O Databricks recomenda a atualização para o Databricks Runtime 18.2 e superior para resolver.
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 (Python UDFs (funções escalares definidas pelo usuário)) | ✓ |
| 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, defina o tamanho do lote de seta (
spark.sql.execution.arrow.maxRecordsPerBatch) como 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. - Para cargas de trabalho sensíveis à latência com UDFs, o Databricks recomenda que você use o modo de acesso dedicado. No modo de acesso padrão, a sobrecarga de isolamento de segurança pode diminuir o desempenho da UDF.