Gravar dados do serviço gerenciado para Apache Kafka no BigQuery

Se você precisar carregar mensagens AVRO ou JSON de um tópico do Serviço Gerenciado para Apache Kafka em uma tabela do BigQuery, use um modelo do Dataflow. Este documento ajuda você a configurar um pipeline com base nesse modelo usando o console Google Cloud . Também é possível usar a API REST ou a Google Cloud CLI para configurar esse pipeline.

Google Cloud produtos usados

O modelo Kafka para BigQuery Dataflow usa os seguintes produtos Google Cloud faturáveis. Use a calculadora de preços para gerar uma estimativa de custo com base no uso previsto.

  • BigQuery: o BigQuery é o data warehouse sem servidor do Google Cloud. Nesta solução, o BigQuery é o destino dos dados do Kafka. A API BigQuery Streaming Write é usada para gravar os dados no BigQuery. Em seguida, use o BigQuery para analisar esses dados com consultas SQL, criar modelos de machine learning com o BigQuery ML e impulsionar seus aplicativos de Business Intelligence.
  • Dataflow: é um serviço de processamento de dados totalmente gerenciado. O Dataflow do Kafka para BigQuery usa o Dataflow para criar um pipeline que lê dados do seu tópico do Kafka, realiza as transformações necessárias e os grava no BigQuery. O escalonamento automático e os recursos de recuperação automática do Dataflow garantem que seu pipeline seja executado de forma confiável e eficiente.
  • Cloud Storage: embora não esteja diretamente envolvido no fluxo de dados principal, o Cloud Storage pode ser usado para armazenar seus arquivos de esquema Avro se você estiver usando a codificação binária Avro para suas mensagens do Kafka. Isso permite que o pipeline do Dataflow interprete corretamente a estrutura dos seus dados.

Além disso, a solução também usa o Serviço Gerenciado para Apache Kafka.

  • Serviço gerenciado para Apache Kafka: um serviço Google Cloud que ajuda você a executar o Apache Kafka. Com o Serviço Gerenciado para Apache Kafka, você se concentra na criação de sistemas orientados a eventos e pipelines de dados de streaming, em vez de gerenciar a infraestrutura. Para mais informações sobre os preços do Serviço Gerenciado para Apache Kafka, consulte o guia de preços.

Antes de começar

Antes de iniciar o modelo do Dataflow do Kafka para o BigQuery, verifique se você concluiu o seguinte:

  1. Crie um cluster e um tópico do Serviço Gerenciado para Apache Kafka.

    Uma maneira de criar um cluster e um tópico é seguir o início rápido do Serviço Gerenciado para Apache Kafka.

    Se o tópico tiver registros Avro, consulte Configurar o formato de mensagem do Kafka para ver outros requisitos de recursos.

  2. Ative as seguintes APIs Google Cloud :

    • Dataflow

    • BigQuery

    • Cloud Storage

    gcloud services enable dataflow.googleapis.com bigquery.googleapis.com \
    storage.googleapis.com
    
  3. Crie um conjunto de dados e uma tabela do BigQuery. Verifique se o esquema da tabela corresponde ao esquema do tópico de entrada do Kafka.

    Se você estiver usando vários esquemas no mesmo tópico e gravando em várias tabelas, não será necessário criar uma tabela antes de configurar o pipeline.

    Para mais informações sobre como criar um conjunto de dados e uma tabela do BigQuery, consulte Criar um conjunto de dados e Criar uma tabela vazia com uma definição de esquema.

Conceda o papel de cliente do Kafka gerenciado à conta de serviço do worker do Dataflow

Para conectar seu job do Dataflow ao serviço gerenciado do Google Cloud para Apache Kafka, conceda permissões específicas à conta de serviço do worker do Dataflow. Essa conta de serviço é a identidade usada para todas as VMs de worker no seu job do Dataflow, e todas as solicitações feitas dessas VMs utilizam essa conta.

Para permitir o acesso aos recursos do Kafka, conceda o papel roles/managedkafka.client à conta de serviço do worker do Dataflow. Esse papel inclui a permissão managedkafka.clusters.connect necessária para estabelecer conexões.

Para mais informações sobre a conta de serviço do worker, consulte Segurança e permissões para pipelines no Google Cloud.

Para conceder o papel de cliente do Kafka gerenciado à conta de serviço do Dataflow, siga estas etapas:

Console

  1. No console do Google Cloud , acesse a página IAM.
    Acessar o IAM
  2. Verifique se o projeto está definido como o projeto de consumidor que o cliente do Serviço gerenciado para Apache Kafka acessaria.
  3. Clique em Conceder acesso.
  4. Na nova página, em Adicionar principais, insira o endereço de e-mail da conta de serviço do worker do Dataflow que você está usando.
  5. Em Atribuir papéis, selecione o papel Cliente gerenciado do Kafka.
  6. Clique em Salvar.

CLI da gcloud

  1. No console do Google Cloud , ative o Cloud Shell.

    Ativar o Cloud Shell

    Na parte de baixo do console Google Cloud , uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.

  2. Execute o comando gcloud projects add-iam-policy-binding:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member serviceAccount:SERVICE_ACCOUNT_EMAIL \
      --role roles/managedkafka.client

    Substitua:

    • PROJECT_ID é o ID do projeto.

    • SERVICE_ACCOUNT_EMAIL é o endereço de e-mail da conta de serviço do worker do Dataflow.

Iniciar o modelo do Dataflow do Kafka para o BigQuery

É possível iniciar o modelo Kafka para BigQuery Dataflow na página de detalhes do cluster no console.

  1. No console do Google Cloud , acesse a página Cluster.

    Acessar Clusters

    Os clusters criados em um projeto são listados.

  2. Para acessar a página de detalhes do cluster, clique no nome dele.
  3. Na página de detalhes do cluster, em Temas, clique no ícone do BigQuery Export em qualquer tema.

    A página Criar um job do Dataflow usando o modelo "Kafka para BigQuery" é aberta.

Configure os campos no modelo de acordo com as informações incluídas nas seções a seguir.

Insira um nome para o job

No campo Nome do job, insira um nome para o job do Dataflow.

O nome precisa ser exclusivo entre todos os jobs em execução no projeto.

Escolher um endpoint regional para seu pipeline

No campo Endpoint regional, defina o endpoint regional como o local do cluster do Kafka ou do conjunto de dados do BigQuery para minimizar as taxas de transferência de dados entre regiões.

Os workers do Dataflow podem ser executados independentemente da região do cluster do Kafka. No entanto, você vai ter custos de saída inter-regional se iniciar workers fora da região do seu cluster do Kafka.

Para conferir a localização do cluster, siga as etapas em Listar seus clusters do Serviço gerenciado para Apache Kafka.

Escolher um modelo do Dataflow

Em Modelo do Dataflow, mantenha o valor padrão Kafka para BigQuery.

Configurar origem

  1. Em Origem, mantenha o valor padrão Serviço gerenciado para Apache Kafka.

  2. Os valores padrão para Cluster do Kafka, Tópico do Kafka e Modo de autenticação de origem do Kafka já estão selecionados com base no tópico escolhido. Mantenha esses valores.

Configurar o formato de mensagem do Kafka

O modelo do Dataflow é compatível com três formatos de mensagem:

  • Formato de transmissão Avro Confluent: cada mensagem do Kafka inclui um byte mágico, um ID de esquema e o registro codificado em binário do Avro. Por padrão, a chave da mensagem não é carregada no BigQuery.

    Para formatos Avro (formato de transmissão Confluent), é possível usar um ou vários esquemas:

    • Esquema único: todas as mensagens seguem um único esquema Avro predefinido.

    • Vários esquemas: as mensagens podem usar esquemas diferentes. Isso só é compatível com o formato Avro (formato de fio do Confluent).

  • Avro (codificado em binário): as mensagens contêm apenas o payload do registro, sem metadados. É necessário fornecer um arquivo de esquema Avro (.avsc) enviado para o Cloud Storage. Todas as mensagens precisam obedecer a esse único esquema.

  • JSON: os registros não exigem um esquema predefinido. Os registros que não estão de acordo com o esquema da tabela do BigQuery são enviados para a fila de mensagens não entregues (se configurada) ou uma mensagem de erro é registrada. O formato aceito é {"field": "value"}. O formato [{"name": "field", "value": "value"}] não é aceito.

Formato de fio Avro Confluent

Se você escolher essa opção como o formato de mensagem do Kafka, configure as seguintes opções adicionais:

Origem do esquema: esse campo informa ao pipeline onde encontrar o esquema. Escolha uma das seguintes opções:

  • Registro de esquema: seus esquemas são armazenados em um registro de esquema do Confluent. Isso é útil para evoluir esquemas e gerenciar várias versões. Verifique se o registro de esquema está acessível à rede de cluster do Serviço gerenciado para Apache Kafka e hospedado na mesma região que os workers do Dataflow. É possível usar um registro de esquema com cenários de esquema único e múltiplo. Defina as seguintes configurações extras:

    • URL de conexão do registro de esquema: forneça o URL para se conectar ao registro de esquema.

    • Modo de autenticação: se o registro exigir autenticação, selecione OAuth ou TLS. Caso contrário, selecione Nenhum.

  • Arquivo de esquema único: escolha essa opção se todas as suas mensagens seguirem um esquema único e fixo definido em um arquivo.

    • Arquivo do Cloud Storage para o arquivo de esquema Avro: o caminho para o arquivo de esquema Avro usado para decodificar todas as mensagens em um tópico.

O Serviço gerenciado para Apache Kafka não oferece um registro de esquema. O modelo só aceita a transmissão de credenciais de autenticação para registros de esquema compatíveis com o formato Confluent-wire.

Codificação binária Avro

Se você escolher essa opção como o formato de mensagem do Kafka, configure as seguintes opções adicionais:

  • Arquivo do Cloud Storage para o arquivo de esquema Avro: o caminho para o arquivo de esquema Avro usado para decodificar todas as mensagens em um tópico.

JSON

Se você escolher essa opção como o formato de mensagem do Kafka, nenhuma outra configuração será necessária.

Configurar para manter a chave do Kafka na tabela do BigQuery

Se você ativar a opção Manter a chave da mensagem do Kafka na tabela do BigQuery, também será necessário adicionar um campo chamado _key do tipo BYTES na tabela de destino. Embora a chave possa representar dados estruturados, o modelo a trata como uma matriz de bytes.

Especificar opções de ajuste

  1. Para evitar o reprocessamento de mensagens quando trabalhadores individuais ou todo o pipeline precisam ser reiniciados, selecione a opção Confirmar offsets no Kafka. Isso garante que o pipeline retome o processamento de onde parou, evitando o processamento duplicado e possíveis inconsistências de dados.

  2. No campo Insira o ID do grupo de consumidores, digite um nome exclusivo para o grupo do pipeline. Na maioria das circunstâncias, você quer que o pipeline leia cada mensagem uma vez e possa ser reiniciado.

  3. No campo Deslocamento inicial padrão do Kafka, o pipeline do Dataflow oferece duas opções de deslocamento inicial. Selecione uma destas opções:

    • Mais antiga: processa mensagens desde o início do tópico do Kafka.

    • Mais recente: processa mensagens a partir do último deslocamento disponível.

Configurar destino

Essas opções controlam como o pipeline de dados grava dados no BigQuery.

O campo Estratégia de nome da tabela determina como os dados são organizados em tabelas do BigQuery. Você tem duas opções:

  • Nome de uma única tabela (padrão): todos os dados do seu tópico do Kafka vão para uma única tabela do BigQuery. Essa é a opção mais simples e recomendada quando os dados do Kafka têm o mesmo esquema.

    Em Tabela de saída do BigQuery, especifique o nome da tabela que vai armazenar todos os dados do seu tópico do Kafka.

  • Nomes de tabelas dinâmicos: cria várias tabelas do BigQuery com base no esquema das mensagens do Kafka. Recomendamos essa opção quando as mensagens do Kafka têm esquemas diferentes. Essa opção só funciona se o pipeline usar o Avro Confluent Wire ou o registro de esquema para processar a estrutura da mensagem.

    Cada esquema exclusivo nas mensagens do Kafka tem uma tabela própria no BigQuery. Os nomes das tabelas são gerados automaticamente com base nos nomes dos esquemas.

    Se você selecionar Nomes de tabelas dinâmicas, configure estes campos adicionais:

    • Projeto de saída do BigQuery: o projeto Google Cloud em que seu conjunto de dados do BigQuery está localizado.

    • Conjunto de dados de saída do BigQuery: o conjunto de dados no seu projeto em que as tabelas são criadas.

    • Prefixo de nomenclatura da tabela do BigQuery (opcional): adicione um prefixo aos nomes de tabela gerados automaticamente para melhor organização.

Configurar a API BigQuery Storage Write

Para o Número de streams da API BigQuery Storage Write, comece com 0 (padrão). Com essa opção, o pipeline determina automaticamente o melhor número de streams.

Essa configuração controla quantos streams paralelos são usados para gravar dados no BigQuery. Números mais altos podem melhorar a velocidade de gravação, principalmente para grandes volumes de dados. O número ideal depende dos seus dados e da configuração do BigQuery.

Configurar a frequência de acionamento

Para a opção Frequência de acionamento em segundos da API BigQuery Write, comece com 5 segundos (padrão). Esse é um bom equilíbrio para a maioria dos casos de uso.

Essa configuração determina a frequência com que os dados são gravados no BigQuery.

Números menores significam gravações mais frequentes. Isso pode reduzir a latência, mas pode aumentar os custos do BigQuery. Números mais altos significam gravações menos frequentes. Isso pode ser mais econômico, mas pode aumentar a latência.

Configurar a fila de mensagens inativas

Às vezes, as mensagens não podem ser processadas devido a corrupção, tipos de dados incompatíveis ou incompatibilidades de esquema com a tabela de destino do BigQuery.

Para processar esses casos, ative a fila de mensagens inativas no modelo e forneça um nome de tabela. O modelo cria a tabela usando um esquema padronizado. As mensagens errôneas são gravadas em uma tabela separada do BigQuery.

Configurar criptografia

Por padrão, todos os dados em repouso e em trânsito são criptografados por um Google-owned and Google-managed encryption key. Se você tiver chaves de criptografia gerenciadas pelo cliente (CMEK), poderá selecionar suas próprias chaves. Para mais informações sobre como configurar uma CMEK, consulte Configurar a criptografia de mensagens.

Configurar rede

É preciso especificar a rede e a sub-rede do cluster no modelo do Dataflow. A seção Parâmetros opcionais do modelo permite definir a rede para os workers do Dataflow.

O modelo do Dataflow do Kafka para o BigQuery provisiona trabalhadores do Dataflow na rede padrão do seu projeto por padrão. Para permitir que o cluster do Serviço Gerenciado para Apache Kafka envie dados ao BigQuery pelo Dataflow, verifique se os workers do Dataflow podem acessar a rede do cluster.

Recomendamos que, se o cluster do Kafka não estiver conectado a uma sub-rede na rede padrão do projeto, use a rede padrão do projeto para o cluster do Kafka.

Para mais informações sobre como configurar a rede com seu pipeline do Dataflow, consulte o seguinte:

Se você tiver dificuldades para configurar a rede do Dataflow, consulte o guia de solução de problemas de rede do Dataflow.

Configurar parâmetros opcionais do Dataflow

Configure os parâmetros opcionais apenas se você souber o impacto da configuração nos workers do Dataflow. Configurações incorretas podem afetar o desempenho ou o custo. Para explicações detalhadas de cada opção, consulte Parâmetros opcionais.

Monitoramento

O modelo do Dataflow para Kafka no BigQuery oferece uma experiência de monitoramento que permite explorar registros, métricas e erros no console. Esse pacote de ferramentas de monitoramento está disponível como parte da interface do usuário do Dataflow.

Na guia Métricas do job, é possível criar painéis personalizados. Para o modelo do Kafka para o BigQuery, recomendamos configurar um painel de métricas de job que monitore o seguinte:

  • Capacidade de processamento: o volume de dados processados a qualquer momento. Isso é útil para monitorar o fluxo de dados no job e identificar possíveis problemas de desempenho.

    Para mais informações, consulte Monitoramento da capacidade de processamento do Dataflow.

  • Atualização de dados: a diferença em segundos entre o carimbo de data/hora no elemento de dados e o horário em que o evento é processado no pipeline. Isso ajuda a identificar gargalos de desempenho e de fonte de dados ou novas tentativas frequentes.

    Para mais informações, consulte Monitoramento da atualização de dados do Dataflow.

  • Backlog: a quantidade de bytes aguardando processamento. Essas informações orientam as decisões de escalonamento automático.

Para mais informações sobre o monitoramento do Dataflow, consulte a documentação do Dataflow.

Solução de problemas

Se você encontrar problemas de performance com seu pipeline do Dataflow, o Dataflow oferece um conjunto abrangente de ferramentas de diagnóstico e solução de problemas.

Confira dois cenários comuns e os respectivos guias de solução de problemas:

Para uma visão geral da depuração de pipelines do Dataflow, consulte Resolver problemas e depurar pipelines do Dataflow.

Limitações conhecidas

  • O modelo não aceita a transmissão de credenciais para autenticação no Schema Registry.

  • Ao criar o job do Dataflow do Kafka para o BigQuery, verifique se o projeto Google Cloud está definido como o mesmo projeto que contém o cluster do Serviço gerenciado para Apache Kafka.

A seguir