Usar o Debezium para se conectar ao Spanner Omni

O Debezium é uma plataforma distribuída de código aberto para captura de dados alterados (CDC). O conector do Debezium para Spanner captura mudanças no nível da linha dos fluxo de alterações do Spanner e os transmite para tópicos do Apache Kafka.

O conector do Debezium funciona com o Spanner Omni da mesma forma que funciona com o Spanner. Neste documento, mostramos como configurar o conector do Debezium para se conectar ao Spanner Omni.

As conexões do Spanner Omni Debezium oferecem suporte a três configurações de segurança: texto simples, TLS e TLS mútuo (mTLS).

Antes de começar

Para usar o conector Debezium com o Spanner Omni, verifique se você atende aos seguintes pré-requisitos:

Configurar o conector do Debezium

Para conectar o conector do Debezium ao Spanner Omni, especifique as seguintes propriedades na configuração do conector do Kafka Connect:

  • Defina connector.class como io.debezium.connector.spanner.SpannerConnector.
  • Defina spanner.type como OMNI. Quando definido como OMNI, gcp.spanner.project.id e gcp.spanner.instance.id são definidos automaticamente como default e não são necessários na configuração.
  • gcp.spanner.host: o endpoint do Spanner Omni. Por exemplo, http://localhost:15000 para texto simples ou https://localhost:15000 para TLS e mTLS.
  • gcp.spanner.database.id: o ID do banco de dados do Spanner Omni.
  • gcp.spanner.change-stream.name: o nome do fluxo de mudanças a ser capturado.
  • spanner.omni.use.plaintext: opcional. Defina como true para estabelecer uma conexão de texto simples.
  • spanner.omni.client.cert.path: opcional. O caminho para o arquivo de certificado do cliente para conexões mTLS.
  • spanner.omni.client.key.path: opcional. O caminho para o arquivo de chave privada do cliente no formato PKCS#8 para conexões mTLS.

Estabelecer uma conexão

Os exemplos a seguir mostram como configurar o conector Debezium para cada configuração de segurança compatível:

Texto simples

Para estabelecer uma conexão de texto simples, defina spanner.type como OMNI, especifique o endpoint com http:// e defina spanner.omni.use.plaintext como true:

{
  "name": "CONNECTOR_NAME",
  "config": {
    "connector.class": "io.debezium.connector.spanner.SpannerConnector",
    "tasks.max": "1",
    "spanner.type": "OMNI",
    "gcp.spanner.host": "http://ENDPOINT",
    "gcp.spanner.database.id": "DATABASE_ID",
    "gcp.spanner.change-stream.name": "CHANGE_STREAM_NAME",
    "spanner.omni.use.plaintext": "true"
  }
}

Substitua:

  • CONNECTOR_NAME: o nome da instância do conector Debezium, por exemplo, spanner-omni-connector.

  • ENDPOINT: o endpoint da sua instância do Spanner Omni, por exemplo, localhost:15000.

  • DATABASE_ID: o ID do banco de dados do Spanner Omni, por exemplo, test-db.

  • CHANGE_STREAM_NAME: o nome do fluxo de mudanças no seu banco de dados, por exemplo, my_change_stream.

TLS

Para estabelecer uma conexão TLS, adicione o certificado de CA do Spanner Omni ao truststore do Java, conforme descrito em Configurar o truststore do Java. Defina spanner.type como OMNI e especifique o endpoint usando https://:

{
  "name": "CONNECTOR_NAME",
  "config": {
    "connector.class": "io.debezium.connector.spanner.SpannerConnector",
    "tasks.max": "1",
    "spanner.type": "OMNI",
    "gcp.spanner.host": "https://ENDPOINT",
    "gcp.spanner.database.id": "DATABASE_ID",
    "gcp.spanner.change-stream.name": "CHANGE_STREAM_NAME"
  }
}

Substitua:

  • CONNECTOR_NAME: o nome da instância do conector Debezium, por exemplo, spanner-omni-connector.

  • ENDPOINT: o endpoint da sua instância do Spanner Omni, por exemplo, localhost:15000.

  • DATABASE_ID: o ID do banco de dados do Spanner Omni, por exemplo, test-db.

  • CHANGE_STREAM_NAME: o nome do fluxo de mudanças no seu banco de dados, por exemplo, my_change_stream.

mTLS

Para estabelecer uma conexão mTLS, adicione o certificado de CA do Spanner Omni ao truststore do Java, conforme descrito em Configurar o truststore do Java. Defina spanner.type como OMNI, especifique o endpoint usando https:// e especifique os caminhos para o certificado do cliente e a chave privada do cliente. A chave privada do cliente precisa estar em um formato PKCS#8 compatível com Java, conforme descrito nas instruções de mTLS do SDK Java:

{
  "name": "CONNECTOR_NAME",
  "config": {
    "connector.class": "io.debezium.connector.spanner.SpannerConnector",
    "tasks.max": "1",
    "spanner.type": "OMNI",
    "gcp.spanner.host": "https://ENDPOINT",
    "gcp.spanner.database.id": "DATABASE_ID",
    "gcp.spanner.change-stream.name": "CHANGE_STREAM_NAME",
    "spanner.omni.client.cert.path": "PATH_TO_CLIENT_CERT",
    "spanner.omni.client.key.path": "PATH_TO_CLIENT_KEY"
  }
}

Substitua:

  • CONNECTOR_NAME: o nome da instância do conector Debezium, por exemplo, spanner-omni-connector.

  • ENDPOINT: o endpoint da sua instância do Spanner Omni, por exemplo, localhost:15000.

  • DATABASE_ID: o ID do banco de dados do Spanner Omni, por exemplo, test-db.

  • CHANGE_STREAM_NAME: o nome do fluxo de mudanças no seu banco de dados, por exemplo, my_change_stream.

  • PATH_TO_CLIENT_CERT: o caminho para o arquivo de certificado do cliente.

  • PATH_TO_CLIENT_KEY: o caminho para o arquivo de chave privada do cliente no formato PKCS#8.

A seguir