Migrar do Kafka para o Pub/Sub Lite

Este documento é útil se você estiver pensando em migrar do Apache Kafka autogerenciado para o Pub/Sub Lite.

Visão geral do Pub/Sub Lite

O Pub/Sub Lite é um serviço de mensagens de alto volume criado para baixo custo de operação. O Pub/Sub Lite oferece opções Armazenamento junto com a capacidade pré-provisionada. No Pub/Sub Lite, você pode escolher tópicos do Lite zonais ou regionais. Oferta de tópicos regionais do Lite o mesmo SLA de disponibilidade dos tópicos do Pub/Sub. No entanto, existem diferenças de confiabilidade entre o Pub/Sub o Pub/Sub Lite em termos de replicação de mensagens.

Para saber mais sobre o Pub/Sub e o Pub/Sub Lite, consulte O que é o Pub/Sub.

Para saber mais sobre as regiões e zonas compatíveis com o Lite, consulte Locais do Pub/Sub Lite.

Terminologia no Pub/Sub Lite

Confira a seguir alguns dos principais termos do Pub/Sub Lite.

  • Mensagem. Dados que são transferidos pelo serviço Pub/Sub Lite.

  • Tópico. Um recurso nomeado que representa um feed de mensagens. Dentro de no Pub/Sub Lite, é possível criar uma zona Tópico do Lite. Os tópicos regionais do Pub/Sub Lite armazenam dados em duas zonas de uma única região. Tópicos de zona do Pub/Sub Lite replicar dados em apenas uma zona.

  • Reserva. Um pool nomeado de capacidade de processamento compartilhada por vários Tópicos do Lite em uma região.

  • Assinatura: um recurso nomeado que representa um interesse em receber mensagens de um tópico específico do Lite. Uma assinatura é semelhante a um grupo de consumidores no Kafka que se conecta apenas a um único tópico.

  • Assinante. Um cliente do Pub/Sub Lite que recebe mensagens de um tópico do Lite e em uma assinatura específica. Uma assinatura pode ter vários clientes assinantes. Nesse caso, as mensagens são equilibradas entre os clientes assinantes. No Kafka, um assinante é chamado de consumidor.

  • Editor. Um aplicativo que cria mensagens e as envia (publica) em um tópico específico do Lite. Um tópico pode ter vários editores. No Kafka, um editor é chamado de produtor.

Diferenças entre o Kafka e o Pub/Sub Lite

Embora o Pub/Sub Lite seja conceitualmente semelhante ao Kafka, mas é um sistema diferente, com uma API mais restrita e mais focada ingestão de dados. Embora as diferenças sejam irrelevantes para a transferência e o processamento de streams, há alguns casos de uso específicos em que essas diferenças são importantes.

Kafka como banco de dados

Ao contrário do Kafka, o Pub/Sub Lite não oferece suporte atualmente publicação transacional ou compactação de registros, embora a idempotência seja suportada. Esses recursos do Kafka são mais úteis quando o Kafka é usado como banco de dados do que como sistema de mensagens. Se você usa o Kafka principalmente como um banco de dados, considere executar seu próprio cluster Kafka ou usar uma solução Kafka gerenciada, como o Confluent Cloud. Se nenhuma dessas soluções for uma opção, considere usar um banco de dados horizontalmente escalonável, como o Cloud Spanner.

Streams do Kafka

Streams do Kafka é um sistema de processamento de dados baseado no Kafka. Embora permita de clientes consumidores, ele exige acesso a todos os administradores as operações. O Kafka Streams também usa as propriedades do banco de dados transacional do Kafka para armazenar metadados internos. Então, o Pub/Sub Lite não pode ser usado atualmente para aplicativos Kafka Streams.

Apache Beam (em inglês) é um sistema de processamento de dados de streaming semelhante integrado ao Kafka, Pub/Sub e Pub/Sub Lite. É possível executar pipelines do Beam de forma totalmente gerenciada com Dataflow ou em uma infraestrutura pré-existente Apache Flink (em inglês) e clusters do Apache Spark.

Monitoramento

Os clientes Kafka podem ler métricas do lado do servidor. No Pub/Sub Lite, relevantes para o comportamento do editor e do assinante são gerenciadas pelo Cloud Monitoring sem precisar de configurações adicionais.

Gerenciamento de capacidade

A capacidade de um tópico Kafka é determinada pela capacidade do cluster. As configurações de replicação, compactação de chaves e lote determinam a capacidade necessária para atender a qualquer tópico no cluster do Kafka. A capacidade de processamento de um Kafka é limitado pela capacidade das máquinas em que os agentes estão em execução. Por outro lado, você precisa definir o armazenamento e a capacidade para um tópico do Pub/Sub Lite. A capacidade de armazenamento do Pub/Sub Lite é uma propriedade configurável do tópico. A capacidade de throughput é baseada na capacidade da reserva configurada e nos limites inerentes ou configurados por partição.

Autenticação e segurança

O Apache Kafka oferece suporte a vários mecanismos de autenticação e criptografia abertos. No Pub/Sub Lite, a autenticação é baseada no Sistema IAM. A segurança é garantida pela criptografia em repouso e em trânsito. Leia mais sobre a autenticação do Pub/Sub Lite na Fluxo de trabalho de migração, mais adiante neste documento.

Mapear propriedades do Kafka para propriedades do Pub/Sub Lite

O Kafka tem muitas opções de configuração que controlam a estrutura de tópicos, limites e propriedades do agente. Alguns métodos comuns, úteis para ingestão de dados são abordados nesta seção, com equivalentes em Pub/Sub Lite Como o Pub/Sub Lite é uma gerenciado, você não precisa considerar muitas propriedades de corretores.

Propriedades de configuração do tópico

Propriedade do Kafka Propriedade do Pub/Sub Lite Descrição
retention.bytes Armazenamento por partição Todas as partições em um tópico do Lite têm a mesma capacidade de armazenamento configurada. A capacidade de armazenamento total de um tópico do Lite é a soma da capacidade de armazenamento de todas as partições nele.
retention.ms Período de armazenamento de mensagens O período máximo em que um tópico do Lite armazena mensagens. Se você não especificar um período de armazenamento de mensagens, o tópico do Lite armazenará as mensagens até que você exceda a capacidade de armazenamento.
flush.ms, acks Não configurável no Pub/Sub Lite As publicações não são confirmadas até que haja garantia de persistência no armazenamento replicado.
max.message.bytes Não é possível configurar no Pub/Sub Lite. 3,5 MiB é o tamanho máximo de mensagem que pode ser enviada ao Pub/Sub Lite. Os tamanhos das mensagens são calculados de maneira repetível.
message.timestamp.type Não configurável no Pub/Sub Lite Ao usar a implementação do consumidor, o carimbo de data/hora do evento é escolhido quando presente, ou o carimbo de data/hora da publicação é usado no lugar dele. Os carimbos de data/hora de publicação e de eventos estão disponíveis no Beam.

Para saber mais sobre as propriedades do tópico do Lite, consulte Propriedades de um tópico do Lite.

Propriedades de configuração do produtor

O Pub/Sub Lite dá suporte à Protocolo de transferência do produtor. Algumas propriedades mudam o comportamento das bibliotecas de cliente do Cloud do produtor. e alguns dos mais comuns são discutidos na tabela a seguir.

Propriedade do Kafka Propriedade do Pub/Sub Lite Descrição
auto.create.topics.enable Não configurável no Pub/Sub Lite Crie um tópico e uma assinatura que sejam aproximadamente equivalentes a um grupo de consumidores para um único tópico no Pub/Sub Lite. É possível usar o console, a CLI gcloud, a API ou as bibliotecas de cliente do Cloud.
key.serializer e value.serializer Não configurável no Pub/Sub Lite

Obrigatório ao usar o Kafka Producer ou a biblioteca equivalente para comunicação por meio do protocolo com fio.

batch.size Suporte no Pub/Sub Lite Não há suporte para lotes. O valor recomendado para esse valor é de 10 MiB para melhor desempenho.
linger.ms Suporte no Pub/Sub Lite Não há suporte para lotes. O valor recomendado para esse valor é de 50 ms para garantir o melhor desempenho.
max.request.size Compatível com o Pub/Sub Lite O servidor impõe um limite de 20 MiB por lote. Defina esse valor como menor que 20 MiB no cliente Kafka.
enable.idempotence Compatível com o Pub/Sub Lite
compression.type Incompatível com o Pub/Sub Lite Defina explicitamente esse valor como none.

Propriedades de configuração do consumidor

O Pub/Sub Lite dá suporte à Protocolo de transferência do consumidor Algumas propriedades mudam o comportamento das bibliotecas de cliente do Cloud para consumidores. e alguns dos mais comuns são discutidos na tabela a seguir.

Propriedade do Kafka Descrição
key.deserializer e value.deserializer

Obrigatório ao usar o Kafka Consumer ou a biblioteca equivalente para comunicação usando o protocolo com fio.

auto.offset.reset Essa configuração não é compatível ou não é necessária. As assinaturas têm a garantia de ter um local de deslocamento definido depois de criadas.
message.timestamp.type O carimbo de data/hora da publicação está sempre disponível no Pub/Sub Lite e não diminui a cada partição. Os carimbos de data/hora dos eventos podem ou não estar presentes, dependendo se foram anexados à mensagem quando publicados. Os carimbos de data/hora de publicação e de evento estão disponíveis ao mesmo tempo ao usar o Dataflow.
max.partition.fetch.bytes, max.poll.records Impõe um limite flexível para o número de registros e bytes retornados de chamadas "pol()" e do número de bytes retornados de solicitações de busca internas. O padrão para "max.partition.fetch.bytes" de 1MiB pode limitar a capacidade de processamento do seu cliente. Considere aumentar esse valor.

Comparar os recursos do Kafka e do Pub/Sub Lite

A tabela a seguir compara os recursos do Apache Kafka com os do Pub/Sub Lite:

Recurso Kafka Pub/Sub Lite
Ordenação das mensagens Sim Sim
Eliminação de mensagens duplicadas Sim Sim, usando o Dataflow
Enviar inscrições Não Sim usando a exportação do Pub/Sub
Transações Sim Não
Armazenamento de mensagens Limitado pelo armazenamento disponível da máquina Ilimitado
Repetição da mensagem Sim Sim
Geração de registros e monitoramento Autogerenciado Automatizado com o Cloud Monitoring
Processamento de stream Sim, com Kafka Streams, Apache Beam ou Dataproc. Sim, com o Beam ou o Dataproc.

A tabela a seguir compara quais funcionalidades são auto-hospedadas com o Kafka e quais são gerenciadas pelo Google usando o Pub/Sub Lite:

Recurso Kafka Pub/Sub Lite
Disponibilidade Implante manualmente o Kafka em outros locais. Implantado em todo o mundo. Consulte locations.
Recuperação de desastres Projete e mantenha backup e replicação próprios. Gerenciada pelo Google.
Gerenciamento de infraestrutura Implementar e operar manualmente máquinas virtuais (VMs) ou máquinas. Manter o controle de versões e os patches consistentes. Gerenciada pelo Google.
Planejamento de capacidade Planeje manualmente as necessidades de armazenamento e computação com antecedência. Gerenciada pelo Google. É possível aumentar a computação e o armazenamento a qualquer momento.
Suporte Nenhuma. Suporte 24 horas por telefone e equipe disponível.

Comparação de custos do Kafka e do Pub/Sub Lite

A maneira de estimar e gerenciar custos no Pub/Sub Lite é diferente do Kafka. Os custos de um cluster Kafka no local nuvem incluem o custo de máquinas, disco, redes, mensagens de entrada e mensagens. Também inclui custos gerais para gerenciar e manter esses sistemas e a infraestrutura relacionada. Ao gerenciar um cluster Kafka, será preciso fazer o upgrade manual das máquinas, planejar a capacidade do cluster e e implementar a recuperação de desastres que inclui planejamento e testes extensivos. Você deve agregar todos esses diversos custos para determinar seus verdadeiros custo total de propriedade (TCO).

Os preços do Pub/Sub Lite incluem o custo de reserva (bytes publicados, bytes inscritos, bytes processados pelo proxy Kafka) e o custo do armazenamento provisionado. Você paga exatamente pelos recursos que usar além das cobranças das mensagens de saída. Você pode usar o calculadora de preços para ter uma estimativa dos custos.

Fluxo de trabalho de migração

Para migrar um tópico de um cluster Kafka para Pub/Sub Lite, use as instruções a seguir.

Configurar recursos do Pub/Sub Lite

  1. Crie uma reserva do Pub/Sub Lite para a taxa de transferência esperada de todos os tópicos que você está migrando.

    Use a calculadora de preços do Pub/Sub Lite para calcular as métricas de throughput agregado dos seus tópicos do Kafka. Para mais informações sobre como criar reservas, consulte Criar e gerenciar reservas do Lite.

  2. Criar um tópico do Pub/Sub Lite para cada tópico correspondente em Kafka.

    Para mais informações sobre como criar tópicos do Lite, consulte Criar e gerenciar tópicos do Lite.

  3. Crie uma assinatura do Pub/Sub Lite para cada grupo de consumidores e par de tópicos no cluster do Kafka.

    Por exemplo, para um grupo de consumidores chamado consumers que consome de topic-a e topic-b, você precisa criar uma assinatura consumers-a anexada a topic-a e uma assinatura consumers-b anexada a topic-b. Para mais informações sobre como criar assinaturas, consulte Criar e gerenciar assinaturas do Lite.

Autenticar no Pub/Sub Lite

Com base no tipo do cliente Kafka, escolha um dos seguintes métodos:

Clientes Kafka baseados em Java versão 3.1.0 ou posterior com recriação

Para clientes Kafka baseados em Java da versão 3.1.0 ou posterior que podem ser recriados na instância em que você está executando o cliente Kafka:

  1. Instale o pacote com.google.cloud:pubsublite-kafka-auth.

  2. Conseguir os parâmetros necessários para a autenticação no Pub/Sub Lite com a ajuda de com.google.cloud.pubsublite.kafka.ClientParameters.getParams:

    O método getParams() (consulte uma exemplo de código ) inicializa o seguinte JAAS e SASL personalizadas como parâmetros para a autenticação no Pub/Sub Lite:

    security.protocol=SASL_SSL
    sasl.mechanism=OAUTHBEARER
    sasl.oauthbearer.token.endpoint.url=http://localhost:14293
    sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.secured.OAuthBearerLoginCallbackHandler
    

Clientes do Kafka baseados em Java que executam a versão 3.1.0 ou mais recente sem precisar ser recriados

Para clientes Kafka compatíveis com KIP-768, oferecemos suporte à autenticação OAUTHBEARER somente de configuração que usa um script sidecar Python. Essas versões incluem a versão de janeiro de 2022 Java versão 3.1.0 ou posterior

Siga estas etapas na instância em que o cliente Kafka está sendo executado:

  1. Instale o Python 3.6 ou superior.

    Consulte Como instalar o Python.

  2. Instale o pacote de autenticação do Google: pip install google-auth

    Essa biblioteca simplifica as várias etapas de autenticação para acessar as APIs do Google. Consulte a página google-auth.

  3. Execute o script kafka_gcp_credentials.py.

    Este script inicia um servidor HTTP local e busca as credenciais padrão do Google Cloud no ambiente usando google.auth.default()

    O principal nas credenciais buscadas precisa ter o pubsublite.locations.openKafkaStream permissão para o projeto do Google Cloud que você está usando e o local que você está conectando. Os papéis de editor do Pub/Sub Lite (roles/pubsublite.publisher) e assinante do Pub/Sub Lite (roles/pubsublite.subscriber) têm essa permissão necessária. Adicione esses papéis principal.

    As credenciais são usadas Autenticação SASL/OAUTHBEARER para o cliente Kafka.

    Os seguintes parâmetros são obrigatórios nas suas propriedades para autenticar no Pub/Sub Lite do cliente Kafka:

    security.protocol=SASL_SSL
    sasl.mechanism=OAUTHBEARER
    sasl.oauthbearer.token.endpoint.url=localhost:14293
    sasl.login.callback.handler.class=org.apache.kafka.common.security.oauthbearer.secured.OAuthBearerLoginCallbackHandler
    sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule \
      required clientId="unused" clientSecret="unused" \
      extension_pubsubProject="PROJECT_ID";
    

    Substitua PROJECT_ID pelo ID do projeto que executa o Pub/Sub Lite.

Todos os outros clientes sem recriar

Para todos os outros clientes, siga estas etapas:

  1. Faça o download de um arquivo JSON da chave da conta de serviço. para a conta de serviço que você pretende usar com seu cliente.

  2. Codifique o arquivo da conta de serviço usando a codificação base64 como sua string de autenticação.

    Em sistemas Linux ou macOS, use o comando base64. (geralmente instalado por padrão), da seguinte maneira:

    base64 < my_service_account.json > password.txt
    

    Você pode usar o conteúdo do arquivo de senhas para autenticação usando os parâmetros a seguir.

    Java

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
     username="PROJECT_ID" \
     password="contents of base64 encoded password file";
    

    Substitua PROJECT_ID pelo ID do projeto que executa o Pub/Sub.

    librdkafka

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.username=PROJECT_ID
    sasl.password=contents of base64 encoded password file
    

    Substitua PROJECT_ID pelo ID do projeto que executa o Pub/Sub.

Clonar dados usando o Kafka Connect

A equipe do Pub/Sub Lite mantém uma implementação de um coletor do Kafka Connect. Você pode configurar esta implementação para copiar dados de um tópico Kafka para um tópico do Pub/Sub Lite usando uma cluster do Kafka Connect.

Para configurar o conector para fazer a cópia dos dados, consulte Conector Kafka de grupo do Pub/Sub.

Se você quiser garantir que a afinidade da partição não seja afetada pela migração verifique se os tópicos kafka e Pub/Sub Lite têm as o mesmo número de partições e que a função pubsublite.ordering.mode é definida como KAFKA. Isso faz com que o conector roteie mensagens para a partição do Pub/Sub Lite com o mesmo índice da partição kafka; em que foram originalmente publicados.

Migrar consumidores

O modelo de recurso do Pub/Sub Lite é diferente do modelo do Kafka. Em especial, ao contrário de um grupo de consumidores, a inscrição é um recurso explícito associadas a um tópico. Devido a essa diferença, qualquer lugar na API Consumer do Kafka que exija que um topic seja transmitido, o caminho de assinatura completo precisa ser transmitido.

Além das configurações SASL do cliente Kafka, as seguintes configurações também são necessárias ao usar a API Kafka Consumer para interagem com o Pub/Sub Lite.

bootstrap.servers=REGION-kafka-pubsub.googleapis.com:443
group.id=unused

Substitua REGION pela região em que está a assinatura do Pub/Sub Lite.

Antes de iniciar o primeiro job do consumidor do Pub/Sub Lite para um determinado assinatura, você pode iniciar (mas não aguardar) uma admin search para definir a localização inicial do seu consumidor.

Quando você começa seus consumidores, eles se reconectam à compensação atual o backlog da mensagem. Execute os clientes antigos e novos em paralelo pelo tempo que for necessário para verificar o comportamento deles e, em seguida, desative os clientes consumidores antigos.

Migrar produtores

Além das configurações SASL do cliente Kafka, o seguinte também é necessário como parâmetro de produtor ao usar o a API Kafka Producer para interagir com o Pub/Sub Lite.

bootstrap.servers=REGION-kafka-pubsub.googleapis.com:443

Substitua REGION pela região em que está o tópico do Pub/Sub Lite.

Após migrar todos os consumidores do tópico para ler do Pub/Sub Lite, mova o tráfego do produtor para o Pub/Sub Lite diretamente.

Migrar gradualmente os clientes de produtores para gravar no tópico do Pub/Sub Lite em vez do tópico do Kafka.

Reinicie os clientes do produtor para escolher novas configurações.

Desativar o Kafka Connect

Depois de migrar todos os produtores em que a gravação será feita Pub/Sub Lite diretamente, o conector não copia mais dados.

É possível desativar a instância do Kafka Connect.

Resolver problemas de conexões Kafka

Como os clientes Kafka se comunicam por meio de um protocolo de transmissão personalizado, não podemos fornecer mensagens de erro para falhas em todas as solicitações. Use os códigos de erro enviados como parte da mensagem.

Para conferir mais detalhes sobre os erros que ocorrem no cliente, defina o nível de registro do prefixo org.apache.kafka como FINEST.

Baixa capacidade de processamento e backlog crescente

Há vários motivos para você estar com baixa capacidade de processamento e um backlog crescente. Um dos motivos pode ser a capacidade insuficiente.

É possível configurar a capacidade de transferência no nível do tópico ou usando reservas. Se a capacidade de transferência for insuficiente para a assinatura e a publicação, a capacidade de transferência correspondente para a assinatura e a publicação será limitada.

Esse erro de capacidade é sinalizado pelo Métrica topic/flow_control_status para editores e a subscription/flow_control_status para assinantes. A métrica fornece os seguintes estados:

  • NO_PARTITION_CAPACITY: essa mensagem indica que o limite de throughput por partição foi atingido.

  • NO_RESERVATION_CAPACITY: essa mensagem indica que o valor por reserva o limite da capacidade de processamento é atingido.

É possível conferir os gráficos de utilização do tópico ou da reserva cota de publicação e assinatura e verifica se a utilização está em 100% ou próximo a isso.

Para resolver esse problema, aumente o capacidade de processamento do um tópico ou reserva.

Mensagem de erro de falha na autorização de tópico

A publicação usando a API Kafka exige que o agente de serviço Lite tenha a permissão permissões corretas para publicar no tópico do Pub/Sub Lite.

Você recebe o erro TOPIC_AUTHORIZATION_FAILED no seu cliente no evento que você não tem as permissões corretas para publicar no Tópico do Pub/Sub Lite.

Para resolver o problema, verifique se o agente de serviço Lite do projeto foi transmitido na configuração de autenticação.

Mensagem de erro de tópico inválido

Inscrever-se usando a API Kafka requer a passagem do caminho completo da assinatura todos os lugares em que um topic é esperado na API Kafka Consumer.

Você receberá o erro INVALID_TOPIC_EXCEPTION no seu cliente de consumidor se não transmitir um caminho de inscrição bem formatado.

Solicitação inválida quando as reservas não estão sendo usadas

O uso do suporte ao protocolo de fio do Kafka exige que todos os tópicos tenham uma reserva associada para cobrar pelo uso.