Ponto de verificação de estado assíncrono para consultas com monitoração de estado
Nota
Disponível em Databricks Runtime 10.4 LTS e superior.
O ponto de verificação de estado assíncrono mantém garantias exatas uma vez para consultas de streaming, mas pode reduzir a latência geral para algumas cargas de trabalho com estado de Streaming Estruturado congestionadas em atualizações de estado. Isso é feito começando a processar o próximo microlote assim que o cálculo do microlote anterior tiver sido concluído sem esperar que o ponto de verificação de estado seja concluído. A tabela a seguir compara as compensações para pontos de verificação síncronos e assíncronos:
Characteristic | Ponto de verificação síncrono | Ponto de verificação assíncrono |
---|---|---|
Latência | Maior latência para cada microlote. | Latência reduzida, pois os microlotes podem se sobrepor. |
Reiniciar | Recuperação rápida, pois apenas o último lote precisa ser executado novamente. | Maior atraso de reinicialização, pois mais do que em microlote pode precisar ser executado novamente. |
A seguir estão as características do trabalho de streaming que podem se beneficiar do ponto de verificação de estado assíncrono:
- O trabalho tem uma ou mais operações com monitoração de estado (por exemplo, agregação,
flatMapGroupsWithState
,mapGroupsWithState
, junções de fluxo de fluxo) - A latência do ponto de verificação de estado é um dos principais contribuintes para a latência geral de execução em lote. Essas informações podem ser encontradas nos eventos StreamingQueryProgress . Esses eventos também são encontrados em logs log4j no driver Spark. Aqui está um exemplo do progresso da consulta de streaming e como encontrar o impacto do ponto de verificação de estado na latência geral de execução em lote.
-
{ "id" : "2e3495a2-de2c-4a6a-9a8e-f6d4c4796f19", "runId" : "e36e9d7e-d2b1-4a43-b0b3-e875e767e1fe", "...", "batchId" : 0, "durationMs" : { "...", "triggerExecution" : 547730, "..." }, "stateOperators" : [ { "...", "commitTimeMs" : 3186626, "numShufflePartitions" : 64, "..." }] }
Análise de latência do ponto de verificação de estado do evento de progresso da consulta acima
- A duração do lote (
durationMs.triggerDuration
) é de cerca de 547 segundos. - A latência de confirmação do armazenamento de estado (
stateOperations[0].commitTimeMs
) é de cerca de 3.186 segundos. A latência de confirmação é agregada entre tarefas que contêm um armazenamento de estado. Neste caso, existem 64 tarefas deste tipo (stateOperators[0].numShufflePartitions
). - Cada tarefa contendo operador de estado levou uma média de 50 segundos (3.186/64) para o ponto de verificação. Esta é uma latência extra que contribui para a duração do lote. Supondo que todas as 64 tarefas estejam sendo executadas simultaneamente, a etapa do ponto de verificação contribuiu com cerca de 9% (50 segundos / 547 segundos) da duração do lote. A porcentagem fica ainda maior quando o máximo de tarefas simultâneas é inferior a 64.
- A duração do lote (
-
Habilitando o ponto de verificação de estado assíncrono
Você deve usar o armazenamento de estado baseado em RocksDB para pontos de verificação de estado assíncronos. Defina as seguintes configurações:
spark.conf.set(
"spark.databricks.streaming.statefulOperator.asyncCheckpoint.enabled",
"true"
)
spark.conf.set(
"spark.sql.streaming.stateStore.providerClass",
"com.databricks.sql.streaming.state.RocksDBStateStoreProvider"
)
Limitações e requisitos para pontos de verificação assíncronos
Nota
O dimensionamento automático de computação tem limitações para reduzir o tamanho do cluster para cargas de trabalho de Streaming Estruturado. O Databricks recomenda a utilização do Delta Live Tables com Dimensionamento Automático para cargas de trabalho de transmissão em fluxo. Consulte Otimizar a utilização de cluster de pipelines Delta Live Tables com dimensionamento automático aprimorado.
- Qualquer falha em um ponto de verificação assíncrono em qualquer um ou mais armazenamentos falhará na consulta. No modo de ponto de verificação síncrono, o ponto de verificação é executado como parte da tarefa e o Spark tenta novamente a tarefa várias vezes antes de falhar na consulta. Esse mecanismo não está presente com o ponto de verificação de estado assíncrono. No entanto, usando as tentativas de trabalho do Databricks, essas falhas podem ser repetidas automaticamente.
- O ponto de verificação assíncrono funciona melhor quando os locais de armazenamento de estado não são alterados entre execuções de microlotes. O redimensionamento do cluster, em combinação com o ponto de verificação de estado assíncrono, pode não funcionar bem porque a instância de armazenamentos de estado pode ser redistribuída à medida que os nós são adicionados ou excluídos como parte do evento de redimensionamento do cluster.
- O ponto de verificação de estado assíncrono é suportado apenas na implementação do provedor de armazenamento de estado RocksDB. A implementação de armazenamento de estado na memória padrão não oferece suporte a ele.