Questo documento descrive come creare un connettore di origine Cloud SQL per PostgreSQL per Kafka Connect.
Un connettore di origine Cloud SQL per PostgreSQL è un'istanza di un connettore Debezium PostgreSQL. Legge le modifiche a livello di riga da un database Cloud SQL per PostgreSQL e le scrive negli argomenti di un cluster Managed Service per Apache Kafka.
I casi d'uso per questo connettore includono:
- Monitora le modifiche al database a livello di riga in tempo reale.
- Integra gli eventi di modifica del database in un'architettura basata sugli eventi.
- Rispondere a eventi di database come inserimenti o eliminazioni di righe.
- Copia le modifiche al database in altri sistemi.
Prima di iniziare
Prima di creare un connettore di origine Cloud SQL per PostgreSQL, assicurati di disporre di quanto segue:
Un'istanza Cloud SQL per PostgreSQL con un database. Per scoprire come creare queste risorse, consulta Creare ed eseguire query su un database Cloud SQL per PostgreSQL utilizzando la console Google Cloud .
Ruoli e autorizzazioni richiesti
Per ottenere le autorizzazioni
necessarie per creare un connettore,
chiedi all'amministratore di concederti il ruolo IAM
Managed Kafka Connector Editor (roles/managedkafka.connectorEditor) nel progetto.
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Questo ruolo predefinito contiene le autorizzazioni necessarie per creare un connettore. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
Per creare un connettore sono necessarie le seguenti autorizzazioni:
-
Crea un connettore:
managedkafka.connectors.create
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Concedere le autorizzazioni per la lettura da Cloud SQL
Il account di servizio Kafka gestito deve disporre dell'autorizzazione per accedere a Cloud SQL per PostgreSQL. Concedi i seguenti ruoli IAM alaccount di serviziot:
- Client Cloud SQL (
roles/cloudsql.client) - Utente dell'istanza Cloud SQL (
roles/cloudsql.instanceUser)
Il account di servizio Kafka gestito ha il seguente formato:
service-PROJECT_NUMBER@gcp-sa-managedkafka.,
dove PROJECT_NUMBER è il numero di progetto del cluster Connect.
Se il cluster di connessione si trova in un progetto diverso dal cluster Managed Service per Apache Kafka, consulta Crea un cluster di connessione in un progetto diverso.
Configura il database
Prima di creare il connettore, devi configurare la replica del database e attivare l'autenticazione del connettore con il database. Le sezioni seguenti descrivono questi passaggi.
Abilita decodifica logica
Un connettore Origine Cloud SQL per PostgreSQL si basa sulla decodifica logica di PostgreSQL. Per abilitare la decodifica logica nell'istanza Cloud SQL per PostgreSQL, segui questi passaggi.
Console
Vai a Cloud SQL > Istanze.
Fai clic sul nome dell'istanza.
Fai clic su Modifica.
Espandi Flag e parametri.
Fai clic su Aggiungi un flag di database.
Nell'elenco Scegli un flag, seleziona
cloudsql.logical_decoding.In Valore, seleziona
On.Fai clic su Fine.
Fai clic su Salva.
Per saperne di più, vedi Configurazione di replica e decodifica logiche.
Configura Change Data Capture (CDC)
Dopo aver abilitato la decodifica logica nell'istanza, abilita Change Data Capture (CDC) per le tabelle che vuoi replicare.
Per abilitare CDC per una tabella, esegui l'istruzione SQL CREATE PUBLICATION. Questa
istruzione crea una pubblicazione, che definisce un gruppo di tabelle da replicare.
Opzione 1. Crea una pubblicazione che replichi le modifiche per tutte le tabelle del database.
CREATE PUBLICATION dbz_publication FOR ALL TABLES;Opzione 2. Crea una pubblicazione per un insieme specifico di tabelle.
CREATE PUBLICATION dbz_publication FOR TABLE TABLE_LIST;Sostituisci
TABLE_LISTcon un elenco separato da virgole di tabelle, nel formato"schema_name"."table_name". L'inserimento dei nomi di schema e tabella tra virgolette doppie, come mostrato, impedisce errori di sintassi se i nomi contengono caratteri speciali o lettere maiuscole.
Per impostazione predefinita, il connettore utilizza dbz_publication per il nome della pubblicazione. Per
utilizzare una pubblicazione con un nome diverso, consulta
Nome pubblicazione.
Crea un account utente per il account di servizio Managed Kafka
Il connettore di origine Cloud SQL per PostgreSQL utilizza l'autenticazione IAM dei database per connettersi al database. Per abilitare l'autenticazione del database IAM, aggiungi il account di servizio Kafka gestito all'istanza Cloud SQL nel seguente modo:
Console
Vai a Cloud SQL > Istanze
Fai clic sul nome dell'istanza.
Nel riquadro di navigazione, fai clic su Utenti.
Fai clic su Aggiungi account utente.
Nel riquadro Aggiungi un account utente, seleziona Cloud IAM.
Nel campo Entità IAM, inserisci quanto segue:
service-PROJECT_NUMBER@gcp-sa-managedkafka.Sostituisci
PROJECT_NUMBERcon il numero di progetto del cluster Connect.Fai clic su Aggiungi.
gcloud
Esegui il comando gcloud sql users create:
gcloud sql users create service-PROJECT_NUMBER@gcp-sa-managedkafka.iam \
--instance=INSTANCE_NAME \
--type=cloud_iam_service_account
Sostituisci quanto segue:
PROJECT_NUMBER: il numero del progetto del cluster Connect.INSTANCE_NAME: il nome dell'istanza Cloud SQL per PostgreSQL.
A causa del limite di lunghezza di un nome utente del database, il suffisso . viene eliminato dal nome utente, quindi il nome utente è service-PROJECT_NUMBER@gcp-sa-managedkafka.iam. Quando esegui
query SQL che fanno riferimento all'account utente IAM, specifica il
nome troncato.
Configura l'account utente
Dopo aver creato l'account utente IAM, connettiti al database
come utente con il ruolo cloudsqlsuperuser (ad esempio l'utente postgres
predefinito) ed esegui le seguenti query SQL.
Console
Consente all'utente di leggere il log write-ahead.
ALTER USER "service-PROJECT_NUMBER@gcp-sa-managedkafka.iam" WITH REPLICATION;Concedi all'utente l'autorizzazione
SELECTsulle tabelle.GRANT SELECT ON ALL TABLES IN SCHEMA "SCHEMA_NAME" TO "service-PROJECT_NUMBER@gcp-sa-managedkafka.iam";In alternativa, puoi concedere l'autorizzazione
SELECTper singole tabelle. Se scegli questa opzione, devi anche impostare la proprietà di configurazionetable.include.listdel connettore sull'elenco delle tabelle consentite. La seguente query SQL concede l'autorizzazioneSELECTsu una singola tabella:GRANT SELECT ON TABLE SCHEMA_NAME.TABLE_NAME TO "service-PROJECT_NUMBER@gcp-sa-managedkafka.iam";Per ogni tabella, concedi all'utente l'accesso allo schema della tabella. Puoi saltare questo passaggio se la tabella si trova nello schema
publicpredefinito.GRANT USAGE ON SCHEMA SCHEMA_NAME TO "service-PROJECT_NUMBER@gcp-sa-managedkafka.iam";
Configura il networking
Un connettore di origine Cloud SQL per PostgreSQL può connettersi all'istanza Cloud SQL nei seguenti modi:
- IP privato
- Private Service Connect
- IP pubblico
Per saperne di più su queste opzioni, consulta la pagina Scegliere come connettersi a Cloud SQL. Come best practice per la sicurezza, è consigliabile utilizzare l'IP privato o Private Service Connect, perché queste opzioni non richiedono la connessione a un indirizzo IP esterno.
La tabella seguente mostra i requisiti di rete per ogni opzione:
| Tipo di indirizzo IP | Requisiti |
|---|---|
| IP privato | Configura l'IP privato per l'istanza. Per ulteriori informazioni, consulta Configura l'IP privato. |
| Private Service Connect |
|
| IP pubblico |
|
Crea un connettore di origine Cloud SQL per PostgreSQL
Per creare un connettore di origine Cloud SQL per PostgreSQL, segui questi passaggi.
Quando il connettore viene inizializzato, esegue le seguenti azioni:
- Crea uno snapshot iniziale del database.
- Crea un argomento Kafka per ogni tabella con righe.
- Per ogni riga del database, invia un evento di modifica all'argomento corrispondente.
Mentre il connettore è in esecuzione, continua a inviare eventi di modifica agli argomenti. Per saperne di più sullo snapshot iniziale, consulta la sezione Snapshot nella documentazione di Debezium.
Console
Nella console Google Cloud , vai alla pagina Connetti cluster.
Fai clic sul cluster di connessione in cui vuoi creare il connettore.
Fai clic su Crea connettore.
Per il nome del connettore, inserisci una stringa.
Per maggiori informazioni su come assegnare un nome a un connettore, consulta le linee guida per assegnare un nome a una risorsa Managed Service per Apache Kafka.
Per Plug-in del connettore, seleziona Origine Cloud SQL per PostgreSQL.
Nell'elenco Istanza, seleziona l'istanza Cloud SQL.
Nell'elenco Database, seleziona il database Cloud SQL.
Nel campo Prefisso argomento, inserisci un prefisso da utilizzare per i nomi degli argomenti Kafka. Scegli un prefisso univoco per ogni connettore di origine Cloud SQL per PostgreSQL.
(Facoltativo) Nel campo Nomi delle tabelle, inserisci un elenco separato da virgole delle tabelle da cui leggere i dati delle modifiche, nel formato
"schema_name"."table_name". Se lasci vuoto questo campo, il connettore legge i dati delle modifiche da tutte le tabelle non di sistema del database.(Facoltativo) Nella casella Configurazioni, aggiungi le proprietà di configurazione o modifica le proprietà predefinite. Per saperne di più, consulta Configura il connettore.
Potresti dover eseguire l'override dei valori predefiniti per le seguenti proprietà:
driver.ipTypes: questa proprietà deve corrispondere alla configurazione di rete della tua istanza Cloud SQL. Consulta la sezione Tipi di indirizzi IP.slot.name: se crei più istanze del connettore per lo stesso database, specifica un valore univoco per ogni connettore. Vedi Slot di replica.
(Facoltativo) Seleziona la policy di riavvio attività. Per saperne di più, consulta le norme sul riavvio delle attività.
Fai clic su Crea.
gcloud
-
Nella console Google Cloud , attiva Cloud Shell.
Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installata e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.
Esegui il comando
gcloud managed-kafka connectors create:gcloud managed-kafka connectors create CONNECTOR_ID \ --location=LOCATION \ --connect-cluster=CONNECT_CLUSTER_ID \ --config-file=CONFIG_FILESostituisci quanto segue:
CONNECTOR_ID: l'ID o il nome del connettore. Per maggiori informazioni su come assegnare un nome a un connettore, consulta le linee guida per assegnare un nome a una risorsa Managed Service per Apache Kafka. Il nome di un connettore è immutabile.LOCATION: la località in cui crei il connettore. Deve essere la stessa località in cui hai creato il cluster di connessione.CONNECT_CLUSTER_ID: l'ID del cluster Connect in cui viene creato il connettore.CONFIG_FILE: il percorso del file di configurazione YAML per il connettore.
Ecco un esempio di file di configurazione per il connettore di origine Cloud SQL per PostgreSQL:
connector.class: io.debezium.connector.postgresql.PostgresConnector database.dbname: DATABASE_NAME driver.cloudSqlInstance: INSTANCE_ID driver.enableIamAuth: "true" driver.ipTypes: IP_TYPES driver.sslmode: disable key.converter: org.apache.kafka.connect.json.JsonConverter key.converter.schemas.enable: "false" plugin.name: pgoutput slot.name: SLOT_NAME table.include.list: TABLE_LIST topic.prefix: TOPIC_PREFIX value.converter: org.apache.kafka.connect.json.JsonConverter value.converter.schemas.enable: "true"Sostituisci quanto segue:
INSTANCE_ID: l'ID dell'istanza Cloud SQL che contiene il database, formattato nel seguente modo:PROJECT_ID:REGION:INSTANCE_NAME
DATABASE_NAME: il nome del database Cloud SQL da cui leggere.IP_TYPES: un elenco separato da virgole di tipi di indirizzi IPSLOT_NAME: il nome dello slot di replica da creare.TABLE_LIST: un elenco separato da virgole delle tabelle da cui leggere i dati delle modifiche, nel formato"schema_name"."table_name".TOPIC_PREFIX: un prefisso da utilizzare per i nomi degli argomenti Kafka.
Configura il connettore
Questa sezione descrive alcune proprietà di configurazione che puoi impostare sul connettore. Per un elenco completo, consulta Connettore Debezium per PostgreSQL nella documentazione di Debezium.
Tipi di indirizzi IP
La proprietà driver.ipTypes specifica il tipo di indirizzo IP utilizzato dal connettore
per connettersi al database:
PRIVATE: IP privatoPSC: Private Service ConnectPUBLIC: IP pubblico
La proprietà driver.ipTypes contiene un elenco separato da virgole di tipi di IP nell'ordine preferito; ad esempio, driver.ipTypes=PRIVATE,PUBLIC.
Per saperne di più, consulta Configura il networking.
Nome pubblicazione
Per impostazione predefinita, il connettore tenta di eseguire lo streaming da una pubblicazione denominata dbz_publication.
Per specificare una pubblicazione diversa, aggiungi
publication.name=PUBLICATION_NAME alla configurazione, dove
PUBLICATION_NAME è il nome della pubblicazione. Esempio:
publication.name=my_publication.
Slot di replica
PostgreSQL utilizza gli slot di replica per trasmettere in streaming le modifiche alle tabelle del database. Per impostazione predefinita,
il connettore crea uno slot di replica denominato debezium. Per utilizzare un nome dello slot diverso,
imposta la proprietà slot.name.
Se crei due istanze del connettore per lo stesso database, devi specificare un nome slot univoco per ogni connettore.
Per impostazione predefinita, il connettore imposta la proprietà
slot.drop.on.stop su false per evitare la perdita di dati. Quando elimini definitivamente un connettore, devi eliminare manualmente lo slot di replica che il connettore utilizzava. Il nome dello slot di replica è impostato per impostazione predefinita su debezium, a meno che non sia configurato
in modo diverso utilizzando la proprietà slot.name.
Ti consigliamo di configurare avvisi per monitorare l'utilizzo del disco WAL sul server di database PostgreSQL di origine e di eliminare gli slot di replica inutilizzati.
Filtro tabella
Per impostazione predefinita, il connettore acquisisce i dati delle modifiche da ogni tabella non di sistema del database. Per filtrare le tabelle acquisite, specifica una o più delle seguenti impostazioni:
schema.include.list. Un elenco di schemi da includere.schema.exclude.list. Un elenco di schemi da escludere. Non può essere utilizzato conschema.include.list.table.include.list. Un elenco di tabelle da includere.table.exclude.list. Un elenco di tabelle da escludere. Non può essere utilizzato contable.include.list.
Nomi degli argomenti
Per impostazione predefinita, il connettore crea argomenti Kafka con la seguente convenzione di denominazione: topic_prefix.schema.table_name, dove topic.prefix è il valore della configurazione topic.prefix.
Per ulteriori informazioni, consulta la sezione Nomi degli argomenti nella documentazione di Debezium.