E/S gerenciada pelo Dataflow

A E/S gerenciada permite que o Dataflow gerencie conectores de E/S específicos usados em pipelines do Apache Beam. A E/S gerenciada simplifica o gerenciamento de pipelines que se integram a origens e coletores com suporte.

A E/S gerenciada consiste em dois componentes que trabalham juntos:

  • Uma transformação do Apache Beam que fornece uma API comum para criar conectores de E/S (origens e coletores).

  • Um serviço do Dataflow que gerencia esses conectores de E/S em seu nome, incluindo a capacidade de fazer upgrade deles independentemente da versão do Apache Beam.

As vantagens da E/S gerenciada incluem:

  • Upgrades automáticos. O Dataflow faz upgrade automático dos conectores de E/S gerenciados no pipeline. Isso significa que seu pipeline recebe correções de segurança, melhorias de desempenho e correções de bugs para esses conectores, sem exigir mudanças no código. Para mais informações, consulte Upgrades automáticos.

  • API consistente. Tradicionalmente, os conectores de E/S no Apache Beam têm APIs distintas, e cada conector é configurado de uma maneira diferente. A E/S gerenciada oferece uma única API de configuração que usa propriedades de chave-valor, resultando em um código de pipeline mais simples e consistente. Para mais informações, consulte a API Configuration.

Requisitos

  • Os SDKs a seguir oferecem suporte à E/S gerenciada:

    • SDK do Apache Beam para Java versão 2.58.0 ou mais recente.
    • SDK do Apache Beam para Python versão 2.61.0 ou mais recente.
  • O serviço de back-end requer o Dataflow Runner v2. Se o Runner v2 não estiver ativado, o pipeline ainda será executado, mas não terá os benefícios do serviço de E/S gerenciado.

Upgrades automáticos

Os pipelines do Dataflow com conectores de E/S gerenciados usam automaticamente a versão confiável mais recente do conector, conforme mostrado abaixo:

  • Quando você envia um job, o Dataflow usa a versão mais recente do conector que foi testada e funciona bem.

  • Para jobs de streaming, o Dataflow verifica atualizações sempre que você inicia um job de substituição e usa automaticamente a versão mais recente conhecida como boa. O Dataflow faz essa verificação mesmo que você não mude nenhum código no job de substituição.

Não é necessário atualizar manualmente o conector ou a versão do Apache Beam do seu pipeline.

O diagrama a seguir mostra o processo de upgrade. O usuário cria um pipeline do Apache Beam usando a versão X do SDK. Quando o usuário envia o job, o Dataflow verifica a versão da E/S gerenciada e faz upgrade dela para a versão Y.

Diagrama que mostra o processo de upgrade de E/S gerenciada.

O processo de upgrade adiciona cerca de dois minutos ao tempo de inicialização de um job. Para verificar o status das operações de E/S gerenciadas, procure entradas de registro que incluam a string "Managed Transform(s)".

API Configuration

A E/S gerenciada é uma transformação do Apache Beam que fornece uma API consistente para configurar origens e coletores.

Para criar qualquer origem ou destino compatível com a E/S gerenciada, use a classe Managed em Java. Especifique qual origem ou coletor será instanciado e transmita um conjunto de parâmetros de configuração, semelhante ao seguinte:

Map config = ImmutableMap.<String, Object>builder()
    .put("config1", "abc")
    .put("config2", 1);

pipeline.apply(Managed.read(/*Which source to read*/).withConfig(config))
    .getSinglePCollection();

Também é possível transmitir parâmetros de configuração como um arquivo YAML. Para conferir um exemplo completo de código, consulte Ler do Apache Iceberg.

Destinos dinâmicos

Para alguns sinks, o conector de E/S gerenciado pode selecionar dinamicamente um destino com base nos valores de campo nos registros recebidos.

Para usar destinos dinâmicos, forneça uma string de modelo para o destino. A string do modelo pode incluir nomes de campos entre chaves, como "tables.{field1}". No momento da execução, o conector substitui o valor do campo para cada registro recebido para determinar o destino desse registro.

Por exemplo, suponha que seus dados tenham um campo chamado airport. Você pode definir o destino como "flights.{airport}". Se airport=SFO, o registro é gravado em flights.SFO. Para campos aninhados, use a notação de ponto. Por exemplo: {top.middle.nested}.

Para conferir um exemplo de código que mostra como usar destinos dinâmicos, consulte Gravar com destinos dinâmicos.

Filtragem

Talvez você queira filtrar determinados campos antes que eles sejam gravados na tabela de destino. Para sinks que oferecem suporte a destinos dinâmicos, use o parâmetro drop, keep ou only para essa finalidade. Esses parâmetros permitem incluir metadados de destino nos registros de entrada, sem gravar os metadados no destino.

É possível definir no máximo um desses parâmetros para um determinado sink.

Parâmetro de configuração Tipo de dado Descrição
drop lista de strings Uma lista de nomes de campos a serem descartados antes de gravar no destino.
keep lista de strings Uma lista de nomes de campos a serem mantidos ao gravar no destino. Os outros campos são descartados.
only string O nome de exatamente um campo a ser usado como o registro de nível superior para gravar ao gravar no destino. Todos os outros campos são descartados. Esse campo precisa ser do tipo "linha".

Fontes e coletores compatíveis

A E/S gerenciada é compatível com as seguintes origens e coletores.