Replique continuamente as alterações de um banco de dados OLTP (por exemplo, Oracle, PostgreSQL, MySQL) para o BigQuery com baixa latência.
→Use o Datastream para realizar Change Data Capture (CDC). Configure-o para fazer stream das alterações diretamente para o BigQuery, que as aplica usando sua capacidade MERGE.
Por quê: O Datastream é um serviço CDC gerenciado e serverless que simplifica a replicação de banco de dados em tempo real sem exigir pipelines personalizados ou uma carga significativa no banco de dados de origem.
Referência↗
Um pipeline de streaming do Dataflow deve produzir resultados precisos em janelas de tempo de evento, mesmo que alguns eventos cheguem horas atrasados.
→Configure janelas de tempo de evento com `allowedLateness` definido para acomodar o atraso. Use triggers com disparos antecipados para resultados preliminares e acumulando panes disparados para incluir dados atrasados.
Por quê: O modelo de watermarks, triggers e `allowedLateness` do Dataflow fornece uma estrutura robusta para equilibrar completude e latência ao lidar com dados fora de ordem.
Um pipeline Dataflow que grava no BigQuery experimenta duplicatas após reinícios ou falhas transitórias.
→Use o sink da BigQuery Storage Write API (`STORAGE_WRITE_API`) com o método definido como `at-least-once` (padrão, anteriormente `STREAMING_INSERTS`) ou `exactly-once` (modo `COMMITTED`).
Por quê: A Storage Write API no modo `COMMITTED` fornece semântica `exactly-once` integrada para streaming, eliminando a necessidade de lógica de deduplicação personalizada.
Ingira dados de uma REST API paginada e com limite de taxa usando Dataflow.
→Use um `SplittableDoFn` para processar a fonte paginada em paralelo. Implemente lógica de limitação de taxa (por exemplo, usando um Guava RateLimiter) e exponential backoff para retentativas dentro do DoFn.
Por quê: Um `SplittableDoFn` permite o rebalanceamento dinâmico do trabalho. Combiná-lo com limitação de taxa e lógica de retry cria um padrão resiliente e eficiente para lidar com APIs externas.
Um único stream de dados precisa ser gravado em múltiplos destinos (por exemplo, BigQuery, Bigtable, Cloud Storage).
→Em um único pipeline Dataflow, após o processamento inicial, aplique múltiplos `PTransform` writers à mesma `PCollection` final.
Por quê: O padrão fan-out é altamente eficiente, pois os dados são processados apenas uma vez. Ele evita o custo e a complexidade de executar múltiplos pipelines separados lendo da mesma fonte.
Um stream de alto volume deve ser enriquecido unindo-se a uma tabela de dimensão de mudança lenta (por exemplo, perfis de usuário) que é atualizada periodicamente.
→Use o padrão side input no Dataflow. Carregue a tabela de dimensão como uma `PCollectionView`. Configure um trigger periódico para atualizar o side input em um cronograma, evitando reinícios do pipeline.
Por quê: Side inputs transmitem os dados da dimensão para todos os workers para buscas rápidas em memória, evitando chamadas de API/DB por elemento. A atualização periódica lida com as atualizações de forma eficiente.
As cargas de trabalho do cluster Dataproc variam significativamente, levando a sobre-provisionamento ou subdesempenho.
→Crie um cluster Dataproc com uma política de autoescalonamento. Defina contagens mínimas/máximas de workers primários e secundários. A política escalará o cluster com base nas métricas YARN.
Por quê: O autoescalonamento otimiza os custos ao corresponder os recursos do cluster à demanda do trabalho, escalando para cima em cargas pesadas e para baixo durante períodos de inatividade.
Um pipeline Dataflow requer binários personalizados, bibliotecas proprietárias ou versões específicas não presentes em imagens de worker padrão, e deve ser executado em uma VPC sem internet.
→Crie uma imagem de container personalizada com todas as dependências pré-instaladas. Envie a imagem para o Artifact Registry. Implante o pipeline usando um Flex Template que referencia o container personalizado.
Por quê: Flex Templates com containers personalizados fornecem controle total sobre o ambiente de tempo de execução e as dependências, crucial para ambientes offline ou especializados.
Um trabalho Dataflow ou Spark que realiza um `GroupByKey` é lento porque algumas chaves têm um número desproporcionalmente grande de valores (uma "chave quente").
→Implemente uma agregação de dois estágios (key salting). Primeiro, anexe um sufixo aleatório à chave para dividir a chave quente entre vários workers. Agregue parcialmente. Segundo, remova o sufixo e agregue os resultados parciais.
Por quê: Esta técnica de fanout divide manualmente o trabalho para a chave quente, permitindo que seja processado em paralelo e superando o gargalo.
Um pipeline de streaming não deve falhar devido a registros malformados. Registros inválidos devem ser isolados para análise sem interromper o processamento.
→Em um `DoFn`, use um bloco try-catch para parsing. Use um `DoFn` de múltiplas saídas com `TupleTag` para rotear registros válidos para a saída principal e registros inválidos (com contexto de erro) para uma saída de erro separada. Envie a `PCollection` de erro para um destino de dead-letter como um tópico Pub/Sub ou uma tabela BigQuery.
Por quê: Este padrão oferece resiliência ao isolar dados ruins, prevenindo falhas no pipeline e garantindo que os registros com falha sejam capturados para depuração e reprocessamento.