Partilhar via


Modo em tempo real no Structured Streaming

Esta página descreve como usar o modo em tempo real com Streaming Estruturado, incluindo o que é e como funciona.

Para instruções de configuração passo a passo, consulte Começar com o modo em tempo real. Para exemplos de código, veja exemplos de modo em tempo real. Para fontes, sumidouros, operadores e limitações suportados, veja Referência de modo em tempo real.

O que é o modo em tempo real?

O modo em tempo real é um tipo de gatilho para Streaming Estruturado que permite o processamento de dados com latência ultra-baixa com latência de ponta a ponta tão baixa quanto cinco milissegundos. Use o modo em tempo real para cargas de trabalho operacionais que requerem resposta imediata a dados em fluxo, como deteção de fraude, personalização em tempo real e sistemas de tomada de decisão instantânea.

Cargas de trabalho operacionais vs. analíticas

As cargas de trabalho em streaming podem ser amplamente divididas em cargas de trabalho operacionais e cargas analíticas:

  • As cargas de trabalho operacionais consomem dados em tempo real, aplicam a lógica de negócios e acionam ações ou decisões downstream.
  • Trabalhos analíticos usam o carregamento e a transformação de dados, normalmente seguindo a arquitetura medalhão (por exemplo, carregamento de dados nas tabelas bronze, prata e ouro).

Alguns exemplos de cargas de trabalho operacionais são:

  • Bloquear ou sinalizar uma transação de cartão de crédito em tempo real se uma pontuação de fraude exceder um limite, com base em fatores como localização incomum, grande tamanho da transação ou padrões de gastos rápidos.
  • Enviar uma mensagem promocional quando os dados de fluxo de cliques indicam que um utilizador está a navegar por jeans há cinco minutos, oferecendo um desconto de 25% se o fizer nos próximos 15 minutos.

Em geral, as cargas de trabalho operacionais caracterizam-se pela necessidade de uma latência de ponta a ponta inferior a um segundo. Isso pode ser alcançado com o modo em tempo real no Apache Spark Structured Streaming.

Como o modo em tempo real alcança baixa latência

O modo em tempo real melhora a arquitetura de execução ao:

  • Executar lotes de longa duração (o padrão é cinco minutos), em que o sistema processa dados à medida que ficam disponíveis na fonte.
  • Agendar todas as fases da consulta em simultâneo. Isso requer que o número de slots de tarefas disponíveis seja igual ou maior do que o número de tarefas de todos os estágios de um lote.
  • Passar dados entre fases assim que são produzidos, usando um streaming shuffle.

No final do processamento de um lote e antes do início do próximo, o Structured Streaming utiliza pontos de verificação para registar o progresso e publica métricas. A duração do lote afeta a frequência dos pontos de controlo:

  • Batches mais longos: Checkpointing menos frequente, o que significa repetições mais longas em caso de falha e atraso na disponibilidade de métricas.
  • Batches mais curtos: Pontos de verificação mais frequentes, o que pode afetar a latência.

O Databricks recomenda comparar o modo em tempo real com a carga de trabalho alvo para encontrar o intervalo de disparo adequado.

Quando usar o modo em tempo real

Escolha o modo em tempo real quando o seu caso de uso exigir:

  • Latência sub-segundo: Aplicações que precisam de responder a dados em milissegundos, como sistemas de deteção de fraude que têm de bloquear transações em tempo real.
  • Tomada de decisões operacionais: Sistemas que desencadeiam ações imediatas com base em dados recebidos, como ofertas em tempo real, alertas ou notificações.
  • Processamento contínuo: Cargas de trabalho em que os dados devem ser processados assim que chegam, em vez de em lotes periódicos.

Use o modo micro-batch (o gatilho padrão de Streaming Estruturado) quando:

  • Processamento analítico: pipelines ETL, transformações de dados e implementações de arquitetura medallion onde os requisitos de latência são medidos em segundos ou minutos.
  • Otimização de custos: Cargas de trabalho onde não é necessária uma latência inferior a um segundo, pois o modo em tempo real requer recursos de computação dedicados.
  • A frequência dos checkpoints importa: Aplicações que beneficiam de checkpoints mais frequentes para uma recuperação mais rápida.

Requisitos e configuração

O modo em tempo real tem requisitos específicos para configuração de computação e configuração de consultas. Esta secção descreve os pré-requisitos e os passos de configuração necessários para utilizar o modo em tempo real.

Pré-requisitos

Para usar o modo em tempo real, deve configurar o seu cálculo para cumprir os seguintes requisitos:

  • Databricks Runtime 16.4 LTS ou superior: O modo em tempo real está disponível apenas no DBR 16.4 LTS e versões posteriores.
  • Computação dedicada: Deve usar uma computação dedicada (anteriormente de utilizador único). Standard (anteriormente partilhados), Lakeflow Spark Declarative Pipelines e clusters sem servidor não são suportados.
  • Desligue o autoescalonamento: O autoescalonamento não é suportado.
  • Desligue o Fotão: A aceleração de Fotões não é suportada.
  • Configuração da faísca: Deve definir spark.databricks.streaming.realTimeMode.enabled para true.

Para instruções passo a passo sobre como criar e configurar computação para o modo em tempo real, consulte Começar com o modo em tempo real.

Configuração da consulta

Para executar uma consulta em modo em tempo real, deve ativar o gatilho em tempo real. Os gatilhos em tempo real são suportados apenas em modo de atualização.

Python

query = (
    spark.readStream
        .format("kafka")
        .option("kafka.bootstrap.servers", broker_address)
        .option("subscribe", input_topic)
        .load()
        .writeStream
        .format("kafka")
        .option("kafka.bootstrap.servers", broker_address)
        .option("topic", output_topic)
        .option("checkpointLocation", checkpoint_location)
        .outputMode("update")
        # In PySpark, the realTime trigger requires specifying the interval.
        .trigger(realTime="5 minutes")
        .start()
)

Scala

import org.apache.spark.sql.execution.streaming.RealTimeTrigger

val readStream = spark.readStream
      .format("kafka")
      .option("kafka.bootstrap.servers", brokerAddress)
      .option("subscribe", inputTopic).load()
      .writeStream
      .format("kafka")
      .option("kafka.bootstrap.servers", brokerAddress)
      .option("topic", outputTopic)
      .option("checkpointLocation", checkpointLocation)
      .outputMode("update")
      .trigger(RealTimeTrigger.apply())
      // RealTimeTrigger can also accept an argument specifying the checkpoint interval.
      // For example, this code indicates a checkpoint interval of 5 minutes:
      // .trigger(RealTimeTrigger.apply("5 minutes"))
      .start()

Dimensionamento computacional

Podes executar um trabalho em tempo real por recurso de computação se o cálculo tiver espaços suficientes para tarefas.

Para ser executado no modo de baixa latência, o número total de slots de tarefas disponíveis deve ser maior ou igual ao número de tarefas em todos os estágios de consulta.

Exemplos de cálculo de faixas horárias

Tipo de pipeline Configuração Slots obrigatórios
Sem estado de estágio único (fonte + sumidouro Kafka) maxPartitions = 8 8 encaixes
Com estado em dois estágios (fonte Kafka + embaralhamento) maxPartitions = 8, partições de shuffle = 20 28 ranhuras (8 + 20)
Três estágios (origem Kafka + shuffle + repartição) maxPartitions = 8, dois estágios de embaralhamento de 20 cada 48 slots (8 + 20 + 20)

Se não definires maxPartitions, usa o número de partições no tópico Kafka.

Desempenho

Para orientações de ajuste de computação, técnicas de otimização de latência e monitorização de consultas, consulte Otimizar e monitorizar o desempenho das consultas em modo em tempo real.

Suporte a funcionalidades e limitações

Para uma lista completa de ambientes suportados, linguagens, tipos de computação, fontes, sumidouros, operadores e limitações conhecidas, veja Referência do modo em tempo real.

Passos seguintes

Agora que percebe o que é o modo em tempo real e como o configurar, explore estes recursos para começar a implementar aplicações de streaming em tempo real: