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) |
LakeFlow Pipelines no clássico | Não há suporte como Structured Streaming. Com suporte via configuração do pipeline. Consulte Use o modo em tempo real em LakeFlow Pipelines. |
Lakeflow pipelines em Serverless | Não há suporte como Structured Streaming. Com suporte via configuração do pipeline. Consulte Use o modo em tempo real em LakeFlow Pipelines. |
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 | 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 | ✓ |
| Não suportado (ver limitação) |
União |
UDFs
Operador | Apoiado |
|---|---|
UDF Scala | |
UDF em Python |
Agregação
Função | 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 | ✓ |
removerDuplicadosDentroDaMarcaD'água | ✓ |
receita para joinà mesa
Operador | Apoiado |
|---|---|
Junção interna | ✓ |
Outer Join | ✓ |
Broadcast table join (tamanho da tabela de 10 MB ou menos) | ✓ |
Table join (sem transmissão) | Não suportado |
Transmissão para transmissão join
Operador | Apoiado |
|---|---|
Junção interna | ✓ (Databricks Runtime 18 LTS e acima, com algumas configurações) |
Outer join | Não suportado |
Para usar o join entre transmissões em modo de tempo real, é preciso definir configurações adicionais do Spark. Para obter mais informação sobre as configurações e sobre os requisitos para execução múltiplas transmissões, consulte transmissão para transmissão joins.
Operador com estado arbitrário
Operador | Apoiado |
|---|---|
(plano)MapGroupsWithState | Não suportado |
transformarComEstado |
Coletores definidos pelo usuário
Afundar | Apoiado |
|---|---|
para cada | ✓ |
paraCadaLote | Não suportado |
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 criar aplicativos personalizados com estado, o Databricks oferece suporte a transformWithState, uma API no Apache Spark Structured Streaming. Consulte Criar um aplicativo personalizado com estado com transformWithState 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 Python (funções escalares definidas pelo usuário (UDFs) 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.