O que é o acompanhamento assíncrono do progresso?
Importante
Este recurso está no
O acompanhamento assíncrono do progresso permite que os pipelines de Streaming Estruturado registem o progresso de forma assíncrona e em paralelo com o processamento real de dados num microlote, reduzindo a latência associada à manutenção do offsetLog
e do commitLog
.
Observação
O acompanhamento assíncrono do progresso não funciona com gatilhos Trigger.once
ou Trigger.availableNow
. A tentativa de habilitar esse recurso com esses gatilhos resulta em falha de consulta.
Como funciona o acompanhamento assíncrono do progresso para reduzir a latência?
O Streaming Estruturado depende da persistência e do gerenciamento de compensações como indicadores de progresso para o processamento de consultas. A operação de gestão de offset afeta diretamente a latência de processamento, pois nenhum processamento de dados pode ocorrer até à conclusão destas operações. O acompanhamento assíncrono do progresso permite que os pipelines de Streaming Estruturado verifiquem o progresso sem serem afetados por essas operações de gerenciamento de compensação.
Quando você deve configurar a frequência do ponto de verificação?
Os usuários podem configurar a frequência na qual o progresso é verificado. As configurações padrão para a frequência do ponto de verificação fornecem uma boa taxa de transferência para a maioria das consultas. Configurar a frequência é útil para cenários em que as operações de gerenciamento de compensação ocorrem a uma taxa maior do que podem ser processadas, o que cria uma lista de pendências cada vez maior de operações de gerenciamento de compensação. Para conter essa crescente lista de pendências, o processamento de dados é bloqueado ou lento, essencialmente revertendo o comportamento de processamento para eliminar os benefícios do rastreamento assíncrono do progresso.
Observação
O tempo de recuperação de falhas aumenta com o prolongamento do intervalo do ponto de verificação. Em caso de falha, um pipeline tem que reprocessar todos os dados antes do ponto de verificação anterior bem-sucedido. Os usuários podem considerar essa compensação entre menor latência durante o processamento regular e tempo de recuperação em caso de falha.
Quais configurações estão associadas ao acompanhamento assíncrono do progresso?
Opção | Valor | Padrão | Descrição |
---|---|---|---|
rastreioAssíncronoDeProgressoHabilitado | verdadeiro/falso | falso | Habilitar ou desabilitar o acompanhamento assíncrono do progresso |
asyncProgressTrackingCheckpointIntervalMs | milissegundos | 1000 | o intervalo em que cometemos compensações e a conclusão compromete |
Como os usuários podem habilitar o acompanhamento assíncrono do progresso?
Os usuários podem usar um código semelhante ao código abaixo para habilitar esse recurso:
val stream = spark.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "host1:port1,host2:port2")
.option("subscribe", "in")
.load()
val query = stream.writeStream
.format("kafka")
.option("topic", "out")
.option("checkpointLocation", "/tmp/checkpoint")
.option("asyncProgressTrackingEnabled", "true")
.start()
Desativar o controlo de progresso assíncrono
Quando o acompanhamento de progresso assíncrono está habilitado, a estrutura não verifica o progresso de cada lote. Para resolver isso, antes de desabilitar o acompanhamento assíncrono de progresso, processe pelo menos dois microlotes com as seguintes configurações:
.option("asyncProgressTrackingEnabled", "true")
.option("asyncProgressTrackingCheckpointIntervalMs", 0)
Interrompa a consulta após pelo menos dois microlotes concluírem o processamento. Agora você pode desativar com segurança o rastreamento de progresso assíncrono e reiniciar a consulta.
Se você tiver desabilitado o controle de progresso assíncrono sem concluir esta etapa, poderá encontrar o seguinte erro:
java.lang.IllegalStateException: batch x doesn't exist
Nos logs de driver, você pode ver o seguinte erro:
The offset log for batch x doesn't exist, which is required to restart the query from the latest batch x from the offset log. Please ensure there are two subsequent offset logs available for the latest batch via manually deleting the offset file(s). Please also ensure the latest batch for commit log is equal or one batch earlier than the latest batch for offset log.
Seguir as instruções nesta seção para desativar o acompanhamento assíncrono do progresso permite que você resolva esses erros e repare sua carga de trabalho de streaming.
Limitações com acompanhamento assíncrono do progresso
Este recurso tem as seguintes limitações:
- O acompanhamento assíncrono do progresso só é suportado em pipelines sem monitoração de estado ao usar Kafka como coletor.
- O processamento de ponta a ponta com garantia de execução única não é garantido com o acompanhamento assíncrono do progresso porque os offsets para processamento em lote podem ser alterados em caso de falha. Alguns lavatórios, como o Kafka, nunca fornecem garantias exatas.