Um conector de origem do Pub/Sub transmite mensagens do Pub/Sub para o Serviço Gerenciado para Apache Kafka, o que permite integrar o Pub/Sub aos seus aplicativos e pipelines de dados baseados no Kafka. Os casos de uso típicos incluem a ingestão de dados em tempo real para processamento de streams e a criação de arquiteturas orientadas a eventos.
Visão geral
Esse conector lê mensagens de uma assinatura do Pub/Sub, converte cada mensagem em um registro do Kafka e grava os registros em um tópico do Kafka. Por padrão, o conector cria registros do Kafka da seguinte maneira:
- A chave de registro do Kafka é
null. - O valor do registro do Kafka são os dados da mensagem do Pub/Sub como bytes.
- Os cabeçalhos de registro do Kafka estão vazios.
No entanto, é possível configurar esse comportamento. Para mais informações, consulte Configurar o conector.
Antes de começar
Antes de criar um conector de origem do Pub/Sub, verifique se você tem o seguinte:
Um tópico do Pub/Sub com uma assinatura.
Um tópico do Kafka no cluster do Kafka.
Um cluster do Connect. Ao criar o cluster do Connect, defina o cluster do Serviço Gerenciado para Apache Kafka como o cluster principal do Kafka.
Papéis e permissões necessárias
Para receber as permissões necessárias
para criar um conector,
peça ao administrador para conceder a você o
papel do IAM de Editor de conector do Kafka gerenciado (roles/managedkafka.connectorEditor) no projeto.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esse papel predefinido contém as permissões necessárias para criar um conector. Para acessar as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As seguintes permissões são necessárias para criar um conector:
-
Crie um conector:
managedkafka.connectors.create
Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.
Conceder permissões para ler do Pub/Sub
O agente de serviço do Kafka gerenciado precisa ter permissão para ler mensagens da assinatura do Pub/Sub. Conceda ao agente de serviço os seguintes papéis do IAM no projeto que contém a assinatura:
- Assinante do Pub/Sub (
roles/pubsub.subscriber) - Leitor do Pub/Sub (
roles/pubsub.viewer)
Se o cluster do Connect estiver em um projeto diferente do cluster do Serviço Gerenciado para Apache Kafka, consulte Criar um cluster do Connect em um projeto diferente.
Criar um conector de origem do Pub/Sub
Console
No console do Google Cloud , acesse a página Clusters do Connect.
Clique no cluster do Connect em que você quer criar o conector.
Clique em Criar conector.
Para o nome do conector, insira uma string.
Para conferir as diretrizes de nomeação de conectores, acesse Diretrizes de nomeação de recursos do Serviço Gerenciado para Apache Kafka.
Em Plug-in do conector, selecione Origem do Pub/Sub.
Na lista Assinatura do Cloud Pub/Sub, selecione uma assinatura do Pub/Sub. O conector extrai mensagens dessa assinatura. A assinatura é exibida como um nome de recurso completo:
projects/{project}/subscriptions/{subscription}.Na lista Tópico do Kafka, selecione o tópico do Kafka em que as mensagens são gravadas.
Opcional: na caixa Configurações, adicione propriedades de configuração ou edite as propriedades padrão. Para mais informações, consulte Configurar o conector.
Selecione a Política de reinicialização da tarefa. Para mais informações, consulte Política de reinicialização de tarefas.
Clique em Criar.
gcloud
Execute o comando
gcloud managed-kafka connectors create:gcloud managed-kafka connectors create CONNECTOR_ID \ --location=LOCATION \ --connect-cluster=CONNECT_CLUSTER_ID \ --config-file=CONFIG_FILESubstitua:
CONNECTOR_ID: o ID ou nome do conector. Para conferir as diretrizes de nomeação de conectores, acesse Diretrizes de nomeação de recursos do Serviço Gerenciado para Apache Kafka. O nome de um conector é imutável.
LOCATION: o local do cluster do Connect.
CONNECT_CLUSTER_ID: o ID do cluster do Connect em que o conector é criado.
CONFIG_FILE: o caminho para um arquivo de configuração YAML ou JSON.
Veja um exemplo de arquivo de configuração:
connector.class: "com.google.pubsub.kafka.source.CloudPubSubSourceConnector"
cps.project: "PROJECT_ID"
cps.subscription: "PUBSUB_SUBSCRIPTION_ID"
kafka.topic: "KAFKA_TOPIC_ID"
value.converter: "org.apache.kafka.connect.converters.ByteArrayConverter"
key.converter: "org.apache.kafka.connect.storage.StringConverter"
tasks.max: "3"
Substitua:
PROJECT_ID: o ID do projeto do Google Cloud em que a assinatura do Pub/Sub está.
PUBSUB_SUBSCRIPTION_ID: o ID da assinatura do Pub/Sub de onde os dados serão extraídos.
KAFKA_TOPIC_ID: o ID do tópico do Kafka em que os dados são gravados.
As propriedades de configuração cps.project, cps.subscription e kafka.topic são obrigatórias. Para mais opções de configuração, consulte
Configurar o conector.
Terraform
É possível usar um recurso do Terraform para criar um conector.
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Go
Antes de testar este exemplo, siga as instruções de configuração do Go em Instalar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Go do Serviço Gerenciado para Apache Kafka.
Para autenticar no Serviço Gerenciado para Apache Kafka, configure o Application Default Credentials(ADC). Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local.
Java
Antes de testar esta amostra, siga as instruções de configuração do Java em Instalar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Java do Serviço Gerenciado para Apache Kafka.
Para autenticar no Serviço Gerenciado para Apache Kafka, configure o Application Default Credentials. Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local.
Python
Antes de testar este exemplo, siga as instruções de configuração do Python em Instalar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Python do Serviço Gerenciado para Apache Kafka.
Para se autenticar no Serviço Gerenciado para Apache Kafka, configure o Application Default Credentials. Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local.
Depois de criar um conector, é possível editar, excluir, pausar, interromper ou reiniciar o conector.
Configurar o conector
Nesta seção, descrevemos algumas propriedades de configuração que podem ser definidas no conector.
Para uma lista completa das propriedades específicas desse conector, consulte Configurações do conector de origem do Pub/Sub.
Modo de extração
O modo de extração especifica como o conector recupera mensagens do Pub/Sub. Estes são os modos compatíveis:
Modo de extração (padrão). As mensagens são extraídas em lotes. Para ativar esse modo, defina
cps.streamingPull.enabled=false.. Para configurar o tamanho do lote, defina a propriedadecps.maxBatchSize.Para mais informações sobre o modo de extração, consulte API Pull.
Modo de pull de streaming. Permite a capacidade máxima de processamento e a menor latência ao recuperar mensagens do Pub/Sub. Para ativar esse modo, defina
cps.streamingPull.enabled=true.Para mais informações sobre o modo de pull de streaming, consulte API StreamingPull.
Se o pull de streaming estiver ativado, será possível ajustar o desempenho definindo as seguintes propriedades de configuração:
cps.streamingPull.flowControlBytes: o número máximo de bytes de mensagens pendentes por tarefa.cps.streamingPull.flowControlMessages: o número máximo de mensagens pendentes por tarefa.cps.streamingPull.maxAckExtensionMs: o tempo máximo que o conector estende o prazo de inscrição, em milissegundos.cps.streamingPull.maxMsPerAckExtension: o tempo máximo que o conector estende o prazo de inscrição por extensão, em milissegundos.cps.streamingPull.parallelStreams: o número de streams para extrair mensagens da assinatura.
Endpoint do Pub/Sub
Por padrão, o conector usa o endpoint global do Pub/Sub. Para
especificar um endpoint, defina a propriedade cps.endpoint como o endereço do endpoint.
Para mais informações sobre endpoints, consulte
Endpoints do Pub/Sub.
Partições do Kafka
Por padrão, o conector grava em uma única partição no tópico. Para especificar
em quantas partições o conector grava, defina a propriedade
kafka.partition.count. O valor não pode exceder a contagem de partições do tópico.
Para especificar como o conector atribui mensagens a partições, defina a propriedade kafka.partition.scheme. Para mais informações, consulte
Configurações do conector de origem do Pub/Sub.
Conversor
Defina o conversor de chaves como org.apache.kafka.connect.storage.StringConverter.
Dependendo da configuração do conector, defina o conversor de valor como uma das seguintes opções:
org.apache.kafka.connect.converters.ByteArrayConverterorg.apache.kafka.connect.json.JsonConverter
Para mais informações, consulte Valor do registro.
Conversão de mensagem
O conector de origem do Pub/Sub converte mensagens do Pub/Sub em registros do Kafka. As seções a seguir descrevem o processo de conversão.
Chave de registro
O conversor de chaves precisa ser org.apache.kafka.connect.storage.StringConverter.
Por padrão, as chaves de registro são
null.Para usar um atributo de mensagem do Pub/Sub como chave, defina
kafka.key.attributecomo o nome do atributo. Por exemplo,kafka.key.attribute=username.Para usar a chave de ordem do Pub/Sub como chave, defina
kafka.key.attribute=orderingKey.
Cabeçalhos de registro
Por padrão, os cabeçalhos de registro ficam vazios.
Se kafka.record.headers for true, os atributos de mensagem do Pub/Sub
serão gravados como cabeçalhos de registro. Para incluir a chave de ordenação, defina
cps.makeOrderingKeyAttribute=true.
Valor do registro
Os valores de registro são gravados como matrizes de bytes ou como tipos struct.
Valores de registro de matriz de bytes
Se kafka.record.headers for true ou a mensagem do Pub/Sub não tiver atributos personalizados, o conector vai gravar os dados da mensagem como uma matriz de bytes.
Defina o conversor de valor como
org.apache.kafka.connect.converters.ByteArrayConverter.
Valores de registro de struct
Se kafka.record.headers for false e a mensagem tiver pelo menos um
atributo personalizado, o conector vai gravar o valor do registro como um struct. Defina o
conversor de valor como org.apache.kafka.connect.json.JsonConverter.
struct contém os seguintes campos:
message: os dados da mensagem do Pub/Sub, em bytes.Um campo para cada atributo de mensagem do Pub/Sub. Para incluir a chave de ordenação, defina
cps.makeOrderingKeyAttribute=true.
Por exemplo, se a mensagem tiver um atributo username, o valor do registro será semelhante ao seguinte:
{
"message":"MESSAGE_DATA",
"username":"Alice"
}
Se value.converter.schemas.enable for true, o struct vai incluir o payload e o esquema:
{
"schema":
{
"type":"struct",
"fields": [
{
"type":"bytes",
"optional":false,
"field":"message"
},
{
"type":"string",
"optional":false,
"field":"username"
}
],
"optional":false
},
"payload": {
"message":"MESSAGE_DATA",
"username":"Alice"
}
}