Ir para o conteúdo principal

Apresentando transformWithState no Apache Spark™ Structured Streaming

Construa consultas de streaming stateful flexíveis e escaláveis

Introducing transformWithState in Apache Spark™ Structured Streaming

Summary

  • Processamento de Estado Mais Flexível - transformWithState aprimora o Apache Spark™ Structured Streaming com gerenciamento de estado flexível, tipos de dados compostos e programação orientada a eventos.
  • Desempenho e Simplicidade Melhorados – Recursos como expiração de estado baseada em TTL, tipos compostos, encadeamento de operadores e inicialização de estado sem interrupções reduzem a complexidade e aumentam a eficiência.
  • Pronto para o Futuro & Escalável - A evolução nativa do esquema e a integração profunda com os recursos do Databricks garantem aplicações de streaming confiáveis e escaláveis.

Introdução

O processamento de fluxo com estado se refere ao processamento de um fluxo contínuo de eventos em tempo real, mantendo um estado baseado nos eventos vistos até agora. Isso permite que o sistema rastreie mudanças e padrões ao longo do tempo no fluxo de eventos e possibilita a tomada de decisões ou ações com base nessas informações.

O processamento de fluxo com estado no Apache Spark Structured Streaming é suportado usando operadores integrados (como agregação em janela, junção de fluxo-fluxo, eliminação de duplicatas etc.) para lógica predefinida e usando flatMapGroupWithState ou mapGroupWithState para lógica arbitrária. A lógica arbitrária permite que os usuários escrevam seu código personalizado de manipulação de estado em seus pipelines. No entanto, à medida que a adoção de streaming cresce na empresa, aplicações de streaming mais complexas e sofisticadas exigem vários recursos adicionais para facilitar aos desenvolvedores a escrita de pipelines de streaming com estado.

Para suportar essas novas aplicações de streaming com estado em crescimento ou casos de uso operacionais, a comunidade Spark está introduzindo um novo operador Spark chamado transformWithState. Este operador permitirá modelagem de dados flexível, tipos compostos, temporizadores, TTL, encadeamento de operadores stateful após transformWithState, evolução de esquema, reutilização de estado de uma consulta diferente e integração com uma série de outros recursos do Databricks, como Catálogo Unity, Delta Live Tables e Spark Connect. Usando este operador, os clientes podem desenvolver e executar seus casos de uso operacionais complexos e críticos de forma confiável e eficiente na plataforma Databricks usando linguagens populares como Scala, Java ou Python.

Aplicações/Casos de Uso usando Processamento de Fluxo com Estado

Muitas aplicações orientadas a eventos dependem de realizar cálculos com estado para acionar ações ou emitir eventos de saída que geralmente são escritos em outro log de eventos/ônibus de mensagens como Apache Kafka/Apache Pulsar/Google Pub-Sub etc. Essas aplicações geralmente implementam uma máquina de estado que valida regras, detecta anomalias, rastreia sessões, etc., e gera os resultados derivados, que são geralmente usados para acionar ações em sistemas a jusante, baseado em:

  • Eventos de entrada
  • Status
  • Tempo (capacidade de trabalhar com tempo de processamento e tempo de evento)
  • Eventos de saída

Exemplos de tais aplicações incluem Rastreamento de Experiência do UsuárioDetecção de AnomaliasMonitoramento de Processos de NegóciosÁrvores de Decisão.

Apresentando transformWithState: Uma API de Processamento com Estado Mais Poderosa

O Apache Spark agora apresenta o transformWithState, um operador de processamento com estado de próxima geração projetado para tornar a construção de aplicações de streaming complexas, em tempo real, mais flexíveis, eficientes e escaláveis. Esta nova API desbloqueia capacidades avançadas para gerenciamento de estado, processamento de eventos, gerenciamento de temporizadores e evolução de esquema, permitindo aos usuários implementar lógica de streaming sofisticada com facilidade.

Design de Alto Nível

Estamos introduzindo uma nova abordagem de API em camadas, flexível e extensível para lidar com as limitações mencionadas. Um diagrama de arquitetura de alto nível da arquitetura em camadas e os recursos associados em várias camadas são mostrados abaixo.

API de Estado em Camadas

Como mostrado na figura, continuamos a usar os backends de estado disponíveis hoje. Atualmente, o Apache Spark suporta dois backends de armazenamento de estado:

  • HDFSBackedStateStoreProvider
  • RocksDBStateStoreProvider

O novo operador transformWithState será inicialmente suportado apenas com o provedor de armazenamento de estado RocksDB. Fazemos uso de várias funcionalidades do RocksDB em torno de varreduras de intervalo, operadores de mesclagem, etc. para garantir o desempenho ideal para os vários recursos usados ​​dentro do transformWithState. Em cima desta camada, construímos outra camada de abstração que usa o StatefulProcessorHandle para trabalhar com tipos compostos, temporizadores, metadados de consulta, etc. No nível do operador, habilitamos o uso de um StatefulProcessor que pode incorporar a lógica de aplicação usada para entregar essas poderosas aplicações de streaming. Finalmente, você pode usar o StatefulProcessor dentro das consultas do Apache Spark baseadas nas APIs DataFrame.

Aqui está um exemplo de uma consulta de streaming do Apache Spark usando o operador transformWithState:

Principais recursos com transformWithState

Modelagem de Dados Flexível com Variáveis de Estado

Com transformWithState, os usuários podem agora definir múltiplas variáveis de estado independentes dentro de um StatefulProcessor baseado no modelo de programação orientada a objetos. Essas variáveis funcionam como membros de classe privados, permitindo um gerenciamento de estado granular sem a necessidade de uma estrutura de estado monolítica. Isso facilita a evolução da lógica da aplicação ao longo do tempo, adicionando ou modificando variáveis de estado sem reiniciar consultas a partir de um novo diretório de checkpoint.

Temporizadores e Callbacks para Processamento Orientado a Eventos

Os usuários agora podem registrar temporizadores para acionar a lógica da aplicação orientada a eventos. A API suporta tanto o tempo de processamento (baseado em relógio) quanto o tempo do evento (baseado em coluna). Quando um temporizador dispara, um callback é emitido, permitindo um manuseio eficiente de eventos, atualizações de estado e geração de saída. A capacidade de listar, registrar e deletar temporizadores garante um controle preciso sobre o processamento de eventos.

Suporte Nativo para Tipos de Dados Compostos

O gerenciamento de estado agora é mais intuitivo com suporte integrado para estruturas de dados compostas:

  • ValueState: Armazena um único valor por chave de agrupamento.
  • ListState: Mantém uma lista de valores por chave, suportando operações de anexação eficientes.
  • MapState: Permite o armazenamento de chave-valor dentro de cada chave de agrupamento com buscas de ponto eficientes

O Spark codifica e persiste automaticamente esses tipos de estado, reduzindo a necessidade de serialização manual e melhorando o desempenho.

Expiração Automática de Estado com TTL

Para conformidade e eficiência operacional, o transformWithState introduz suporte nativo para tempo de vida (TTL) para variáveis de estado. Isso permite que os usuários definam políticas de expiração, garantindo que os dados de estado antigos sejam automaticamente removidos sem a necessidade de limpeza manual.

Encadeamento de Operadores Após transformWithState

Com esta nova API, operadores com estado agora podem ser encadeados após transformWithState, mesmo ao usar o tempo de evento como o modo de tempo. Ao referenciar explicitamente colunas de tempo de evento no esquema de saída, operadores downstream podem realizar filtragem de registros atrasados e evicção de estado de forma contínua - eliminando a necessidade de soluções alternativas complexas envolvendo múltiplos pipelines e armazenamento externo.

Simplificação da Inicialização de Estado

Os usuários podem inicializar o estado a partir de consultas existentes, facilitando a reinicialização ou clonagem de trabalhos de streaming. A API permite integração perfeita com o leitor de fonte de dados de estado, permitindo que novas consultas aproveitem o estado previamente escrito sem processos de migração complexos.

Evolução de Esquema para Consultas Stateful

transformWithState suporta evolução de esquema, permitindo mudanças como:

  • Adicionar ou remover campos
  • Reordenar campos
  • Atualizando tipos de dados

Apache Spark detecta e aplica automaticamente atualizações de esquema compatíveis, garantindo que as consultas possam continuar sendo executadas dentro do mesmo diretório de checkpoint. Isso elimina a necessidade de reconstruções completas do estado e reprocessamento, reduzindo significativamente o tempo de inatividade e a complexidade operacional.

Integração Nativa com o Leitor de Fonte de Dados de Estado

Para facilitar a depuração e observabilidade, transformWithState é integrado nativamente com o leitor de fonte de dados de estado. Os usuários podem inspecionar variáveis de estado e consultar dados de estado diretamente, simplificando a solução de problemas e análise, incluindo recursos avançados como readChangeFeed etc.

Disponibilidade

A API transformWithState está disponível agora com o lançamento do Databricks Runtime 16.2 em Clusters Dedicados No-Isolation e Unity Catalog. Suporte para Clusters Padrão do Catálogo Unity e Computação Serverless será adicionado em breve. A API também está prevista para estar disponível em código aberto com o lançamento do Apache Spark™ 4.0.

Conclusão

Acreditamos que todas as melhorias de recursos embutidas na nova API transformWithState permitirão a construção de uma nova classe de cargas de trabalho operacionais confiáveis, escaláveis e críticas para a missão, alimentando os casos de uso mais importantes para nossos clientes e usuários, tudo dentro do conforto e facilidade de uso das APIs DataFrame do Apache Spark. Importante, essas mudanças também estabelecem a base para futuros aprimoramentos para operadores com estado integrados e novos no Apache Spark Structured Streaming. Estamos animados com as melhorias no gerenciamento de estado no Apache Spark™ Structured Streaming nos últimos anos e aguardamos os desenvolvimentos planejados para o roadmap nesta área no futuro próximo.

Você pode ler mais sobre processamento de fluxo com estado e transformWithState no Databricks aqui.

 

(This blog post has been translated using AI-powered tools) Original Post

Nunca perca uma postagem da Databricks

Inscreva-se nas categorias de seu interesse e receba as últimas postagens na sua caixa de entrada