Pular para o conteúdo principal

Configurar modo em tempo real

Esta página descreve como executar query no modo em tempo real diretamente com as APIs de Structured Streaming no compute. Para obter um tutorial passo a passo, consulte Tutorial: execução uma carga de trabalho de transmissão em tempo real. Para obter informações conceituais sobre o modo em tempo real, consulte Conceitos do modo em tempo real.

O modo em tempo real nos LakeFlow Pipelines é compatível com pipelines gerenciados em compute clássico e Serverless, com requisitos separados de runtime, fonte, destino e operador.

Pré-requisitos​

Para usar o modo tempo real, você deve configurar seu compute para atender aos seguintes requisitos:

  • Use o compute clássico. Os modos de acesso dedicado e padrão são compatíveis. O modo de acesso padrão é compatível apenas com Python. A configuração direta da query nesta página não é compatível em notebooks ou jobs serverless. Para processamento em tempo real serverless, use o modo em tempo real em Lakeflow pipelines.
  • Utilize Databricks Runtime 16.4 LTS ou superior.
  • Desative a escala automática.
  • Desligue o Photon.
  • Defina spark.databricks.streaming.realTimeMode.enabled como true.
  • Desative as instâncias spot para evitar interrupções.

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.

Para obter instruções sobre como criar e configurar compute clássica, consulte a referência de configuração de computação.

joins de transmissão para transmissão​

Joins internos entre transmissões exigem configuração adicional para o modo de tempo real. Outer joins não são compatíveis. Consulte join entre transmissões.

importante

Para executar um join Stream a Stream em modo de tempo real com vários outros Stream no mesmo cluster, é necessário usar o Databricks Runtime 18 LTS e acima.

No Databricks Runtime 18.2 e abaixo, a transmissão estructurada não oferece suporte para as seguintes configurações para outros modos de processamento, incluindo processingTime e availableNow.

Para habilitar joins de transmissão para transmissão para o modo de tempo real, defina as seguintes configurações do Spark:

Python
spark.conf.set("spark.databricks.streaming.realTimeMode.streamStreamJoin.enabled", "true")
spark.conf.set("spark.sql.streaming.join.stateFormatVersion", "4")
spark.conf.set("spark.sql.streaming.join.stateFormatV4.enabled", "true")
spark.conf.set("spark.sql.streaming.stateStore.rocksdb.mergeOperatorVersion", "2")
spark.conf.set("spark.sql.streaming.realTimeMode.controlMessage.enabled", "true")

Configuração da consulta​

Para executar uma consulta no modo tempo real, é necessário habilitar o trigger tempo real. Os gatilhos em tempo real são suportados apenas no 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()
)

dimensionamento de cálculo​

Você pode executar um Job de tempo real por recurso compute se a compute tiver slots de tarefa suficientes.

Para execução em 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 da consulta.

Exemplos de cálculo de slots​

tipo de tubulação

Configuração

Vagas necessárias

Sem estado em estágio único (fonte + destino Kafka)

maxPartitions = 8

8 vagas

Com estado em dois estágios (fonte Kafka + embaralhamento)

maxPartitions = 8, embaralhar partições = 20

28 vagas (8 + 20)

Três estágios (fonte Kafka + shuffle + repartição)

maxPartitions = 8, duas fases de embaralhamento de 20 cada

48 vagas (8 + 20 + 20)

tipo de tubulação

Configuração

Vagas necessárias

Sem estado em estágio único (fonte + destino Kafka)

maxPartitions = 8

8 vagas

Com estado em dois estágios (fonte Kafka + embaralhamento)

maxPartitions = 8, embaralhar partições = 20

28 vagas (8 + 20)

Três estágios (fonte Kafka + shuffle + repartição)

maxPartitions = 8, duas fases de embaralhamento de 20 cada

48 vagas (8 + 20 + 20)

Se você não definir maxPartitions, use o número de partições no tópico do Kafka.

Recursos adicionais​