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 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 de cada registro recebido para determinar o destino dele.

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}.

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.