Replica gli argomenti Kafka con MirrorMaker 2.0

Questo tutorial mostra come replicare i dati tra cluster Managed Service per Apache Kafka utilizzando il connettore di origine MirrorMaker 2.0.

I cluster possono trovarsi nello stesso progetto o in progetti diversi e possono trovarsi nella stessa regione o in regioni diverse. Per questo tutorial, configurerai la replica tra regioni, ma all'interno dello stesso progetto. Tuttavia, i passaggi sono gli stessi per le altre combinazioni.

Architettura

Per questo scenario, esistono tre cluster:

  • Un cluster Kafka i cui dati vengono replicati. Questo cluster è chiamato cluster di origine perché è l'origine dei dati.

  • Un cluster Kafka in cui vengono scritti i dati replicati. Questo cluster è chiamato cluster di destinazione.

  • Un cluster di connessione, che consente di creare e gestire il connettore di origine MirrorMaker 2.0.

Il cluster Connect è collegato al cluster di destinazione. Per ridurre al minimo la latenza per le operazioni di scrittura, posiziona il cluster di connessione nella stessa regione del cluster di destinazione.

Il seguente diagramma mostra questi componenti:

Architettura dello scenario di replica dei dati Kafka

La replica dei dati viene eseguita dal connettore di origine MirrorMaker 2.0. Per questo scenario sono facoltativi altri due connettori MirrorMaker 2.0:

  • Connettore di checkpoint MirrorMaker 2.0: consente il failover senza problemi, assicurando che i consumer sul cluster di destinazione possano riprendere l'elaborazione dallo stesso punto del cluster di origine.

  • Connettore di heartbeat MirrorMaker 2.0: genera messaggi heartbeat periodici sul cluster Kafka di origine, il che ti consente di monitorare lo stato e l'integrità della replica dei dati.

Questo tutorial non utilizza questi connettori facoltativi. Per saperne di più, consulta Quando utilizzare MirrorMaker 2.0.

Prima di iniziare

Console

  1. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Managed Kafka API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Managed Kafka API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  8. Assicurati di disporre dei seguenti ruoli nel progetto: Editor cluster Managed Kafka, Editor cluster Managed Kafka Connect, Editor connettore Managed Kafka

    Controlla i ruoli

    1. Nella console Google Cloud vai alla pagina IAM.

      Vai a IAM
    2. Seleziona il progetto.
    3. Nella colonna Entità, trova tutte le righe che identificano te o un gruppo di cui fai parte. Per scoprire in quali gruppi sei incluso, contatta il tuo amministratore.

    4. Per tutte le righe che ti specificano o ti includono, controlla la colonna Ruolo per verificare se l'elenco dei ruoli include i ruoli richiesti.

    Concedi i ruoli

    1. Nella console Google Cloud vai alla pagina IAM.

      Vai a IAM
    2. Seleziona il progetto.
    3. Fai clic su Concedi l'accesso.
    4. Nel campo Nuove entità, inserisci il tuo identificatore dell'utente. In genere si tratta dell'indirizzo email di un Account Google.

    5. Fai clic su Seleziona un ruolo, quindi cerca il ruolo.
    6. Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo successivo.
    7. Fai clic su Salva.

gcloud

  1. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Installa Google Cloud CLI.

  3. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  4. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  5. Crea o seleziona un Google Cloud progetto.

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l'autorizzazione resourcemanager.projects.create. Scopri come concedere ruoli.
    • Crea un progetto Google Cloud :

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del progetto Google Cloud .

  6. Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud .

  7. Abilita l'API Managed Kafka, se non è già abilitata:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    gcloud services enable managedkafka.googleapis.com
  8. Installa Google Cloud CLI.

  9. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  10. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  11. Crea o seleziona un Google Cloud progetto.

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l'autorizzazione resourcemanager.projects.create. Scopri come concedere ruoli.
    • Crea un progetto Google Cloud :

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del progetto Google Cloud .

  12. Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud .

  13. Abilita l'API Managed Kafka, se non è già abilitata:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    gcloud services enable managedkafka.googleapis.com
  14. Concedi ruoli al tuo account utente. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM: roles/managedkafka.clusterEditor, roles/managedkafka.connectClusterEditor, roles/managedkafka.connectorEditor

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto.
    • USER_IDENTIFIER: l'identificatore del tuo account utente . Ad esempio: myemail@example.com.
    • ROLE: il ruolo IAM che concedi al tuo account utente.

Crea il cluster Kafka di origine

In questo passaggio, crei un cluster Managed Service per Apache Kafka. Questo cluster è il cluster di origine, che contiene i dati da replicare.

Console

  1. Vai alla pagina Managed Service per Apache Kafka > Cluster.

    Vai a Cluster

  2. Fai clic su Crea.

  3. Nella casella Nome cluster, inserisci un nome per il cluster.

  4. Nell'elenco Regione, seleziona una località per il cluster.

  5. Per Configurazione di rete, configura la subnet in cui il cluster è accessibile.

    1. In Progetto, seleziona il tuo progetto.
    2. In Rete, seleziona una rete VPC nel tuo progetto.
    3. In Subnet, seleziona una subnet.
    4. Fai clic su Fine.
  6. Fai clic su Crea.

Durante la creazione del cluster, lo stato del cluster è Creating. Al termine della creazione del cluster, lo stato è Active.

gcloud

Per creare il cluster Kafka di origine, esegui il comando managed-kafka clusters create.

gcloud managed-kafka clusters create SOURCE_KAFKA_CLUSTER \
--location=SOURCE_REGION \
--cpu=3 \
--memory=3GiB \
--subnets=projects/PROJECT_ID/regions/SOURCE_REGION/subnetworks/SOURCE_SUBNET \
--async

Sostituisci quanto segue:

  • SOURCE_KAFKA_CLUSTER: un nome per il cluster Kafka
  • SOURCE_REGION: la posizione del cluster

    Per informazioni sulle località supportate, consulta Località di Managed Service per Apache Kafka.

  • PROJECT_ID: il tuo ID progetto

  • SOURCE_SUBNET: la subnet in cui vuoi eseguire il deployment del cluster, ad esempio default

Il comando viene eseguito in modo asincrono e restituisce un ID operazione:

Check operation [projects/PROJECT_ID/locations/SOURCE_SUBNET/operations/OPERATION_ID] for status.

Per monitorare l'avanzamento dell'operazione di creazione, utilizza il comando gcloud managed-kafka operations describe:

gcloud managed-kafka operations describe OPERATION_ID \
  --location=SOURCE_REGION

Per saperne di più, consulta Monitorare l'operazione di creazione del cluster.

Crea un argomento Kafka

Quando il cluster di origine è pronto, crea un argomento nel seguente modo:

Console

  1. Vai alla pagina Managed Service per Apache Kafka > Cluster.

    Vai a Cluster

  2. Fai clic sul nome del cluster.

  3. Nella pagina dei dettagli del cluster, fai clic su Crea argomento.

  4. Nella casella Nome argomento, inserisci un nome per l'argomento.

  5. Fai clic su Crea.

gcloud

Per creare un argomento Kafka, esegui il comando managed-kafka topics create.

gcloud managed-kafka topics create TOPIC_NAME \
--cluster=SOURCE_KAFKA_CLUSTER \
--location=SOURCE_REGION \
--partitions=10 \
--replication-factor=3

Sostituisci quanto segue:

  • TOPIC_NAME: il nome dell'argomento Kafka da creare
  • SOURCE_KAFKA_CLUSTER: il nome del cluster di origine
  • SOURCE_REGION: la regione in cui hai creato il cluster di origine

Crea il cluster Kafka di destinazione

In questo passaggio, crei un secondo cluster Managed Service per Apache Kafka. Questo cluster è il cluster di destinazione, in cui MirrorMaker 2.0 replica i dati.

Console

  1. Vai alla pagina Managed Service per Apache Kafka > Cluster.

    Vai a Cluster

  2. Fai clic su Crea.

  3. Nella casella Nome cluster, inserisci un nome per il cluster.

  4. Nell'elenco Regione, seleziona una località per il cluster. Scegli una regione diversa da quella in cui si trova il cluster di origine.

  5. Per Configurazione di rete, configura la subnet in cui è accessibile il cluster di destinazione. La subnet deve trovarsi nella stessa rete VPC della subnet del cluster di origine.

    1. In Progetto, seleziona il tuo progetto.
    2. In Rete, seleziona la stessa rete VPC della subnet del cluster di origine.
    3. In Subnet, seleziona la subnet.
    4. Fai clic su Fine.
  6. Fai clic su Crea.

Durante la creazione del cluster, lo stato del cluster è Creating. Al termine della creazione del cluster, lo stato è Active.

gcloud

Per creare il cluster Kafka di destinazione, esegui il comando managed-kafka clusters create.

gcloud managed-kafka clusters create TARGET_KAFKA_CLUSTER \
--location=TARGET_REGION \
--cpu=3 \
--memory=3GiB \
--subnets=projects/PROJECT_ID/regions/TARGET_REGION/subnetworks/TARGET_SUBNET \
--async

Sostituisci quanto segue:

  • TARGET_KAFKA_CLUSTER: un nome per il cluster Kafka
  • TARGET_REGION: la posizione del cluster; scegli una regione diversa da quella in cui si trova il cluster di origine.

    Per informazioni sulle località supportate, consulta Località di Managed Service per Apache Kafka.

  • PROJECT_ID: il tuo ID progetto

  • TARGET_SUBNET: la subnet in cui vuoi eseguire il deployment del cluster, ad esempio default

    Seleziona una subnet nello stesso VPC del cluster di origine.

Crea un cluster di connessione

In questo passaggio, crei un cluster di connessione. La creazione di un cluster Connect richiede in genere 20-30 minuti.

Prima di iniziare questo passaggio, assicurati che il cluster Kafka di destinazione del passaggio precedente sia stato creato completamente.

Console

  1. Vai alla pagina Managed Service per Apache Kafka > Cluster Connect.

    Vai a Connetti cluster

  2. Fai clic su Crea.

  3. Per il nome del cluster di connessione, inserisci una stringa. Esempio: my-connect-cluster.

  4. Per Cluster Kafka principale, seleziona il cluster Kafka di destinazione che hai creato nel passaggio precedente. Non selezionare il cluster Kafka di origine.

  5. Per Posizione, Configurazione di rete e Subnet worker, puoi utilizzare i valori predefiniti o personalizzarli in base ai tuoi requisiti specifici.

  6. Per consentire al cluster di connessione di risolvere il dominio DNS del cluster di origine, esegui i seguenti passaggi:

    1. Espandi Domini DNS risolvibili.

    2. Fai clic su Aggiungi un dominio DNS.

    3. Nell'elenco Cluster Kafka, seleziona il cluster Kafka di origine.

  7. Fai clic su Crea.

Durante la creazione del cluster, lo stato del cluster è Creating. Al termine della creazione del cluster, lo stato è Active.

gcloud

Per creare un cluster di connessione, esegui il comando gcloud managed-kafka connect-clusters create.

gcloud managed-kafka connect-clusters create CONNECT_CLUSTER \
  --location=TARGET_REGION \
  --cpu=12 \
  --memory=12GiB \
  --primary-subnet=projects/PROJECT_ID/regions/TARGET_REGION/subnetworks/TARGET_SUBNET \
  --kafka-cluster=TARGET_KAFKA_CLUSTER \
  --dns-name=SOURCE_KAFKA_CLUSTER.SOURCE_REGION.managedkafka.PROJECT_ID.cloud.goog. \
  --async

Sostituisci quanto segue:

  • CONNECT_CLUSTER: un nome per il cluster Connect
  • TARGET_REGION: la regione in cui hai creato il cluster Kafka di destinazione
  • PROJECT_ID: il tuo ID progetto
  • TARGET_SUBNET: la subnet in cui hai creato il cluster Kafka di destinazione
  • TARGET_KAFKA_CLUSTER: il nome del cluster Kafka di destinazione
  • SOURCE_KAFKA_CLUSTER: il nome del cluster Kafka di origine
  • SOURCE_REGION: la regione in cui hai creato il cluster Kafka di origine

Il comando viene eseguito in modo asincrono e restituisce un ID operazione:

Check operation [projects/PROJECT_ID/locations/TARGET_REGION/operations/OPERATION_ID] for status.

Per monitorare l'avanzamento dell'operazione di creazione, utilizza il comando gcloud managed-kafka operations describe:

gcloud managed-kafka operations describe OPERATION_ID \
  --location=TARGET_REGION

Per saperne di più, consulta Monitorare l'operazione di creazione del cluster.

Crea un connettore di origine MirrorMaker 2.0

In questo passaggio crei un connettore di origine MirrorMaker 2.0. Questo connettore replica i messaggi dal cluster Kafka di origine al cluster Kafka di destinazione.

Console

  1. Vai alla pagina Managed Service per Apache Kafka > Cluster Connect.

    Vai a Connetti cluster

  2. Fai clic sul nome del cluster di connessione.

  3. Fai clic su Crea connettore.

  4. Per Nome connettore, inserisci una stringa. Esempio: mm2-connector.

  5. Nell'elenco Plug-in connettore, seleziona MirrorMaker 2.0 Source.

  6. Per Cluster di origine, seleziona Cluster Managed Service per Apache Kafka.

  7. Nell'elenco Cluster Kafka, seleziona il cluster di origine.

  8. Nella casella Nomi o regex degli argomenti separati da virgole, inserisci il nome dell'argomento o degli argomenti Kafka che vuoi replicare.

  9. Fai clic su Crea.

gcloud

  1. Esegui il comando gcloud managed-kafka clusters describe per ottenere l'indirizzo di bootstrap del cluster Kafka di origine.

    gcloud managed-kafka clusters describe SOURCE_KAFKA_CLUSTER \
      --location=SOURCE_REGION \
      --project=PROJECT_ID \
      --format="value(bootstrapAddress)"
    

    Sostituisci quanto segue:

    • SOURCE_KAFKA_CLUSTER: il nome del cluster Kafka di origine
    • SOURCE_REGION: la regione del cluster di origine
    • PROJECT_ID: il tuo ID progetto
  2. Esegui di nuovo il comando precedente per ottenere l'indirizzo di bootstrap del cluster Kafka di destinazione.

    gcloud managed-kafka clusters describe TARGET_KAFKA_CLUSTER \
      --location=TARGET_REGION \
      --project=PROJECT_ID \
      --format="value(bootstrapAddress)"
    

    Sostituisci quanto segue:

    • TARGET_KAFKA_CLUSTER: il nome del cluster Kafka di destinazione
    • TARGET_REGION: la regione del cluster di destinazione
  3. Per creare un connettore di origine MirrorMaker 2.0, esegui il comando gcloud managed-kafka connectors create.

    gcloud managed-kafka connectors create CONNECTOR_NAME \
      --location=TARGET_REGION \
      --connect-cluster=CONNECT_CLUSTER \
      --configs=connector.class=org.apache.kafka.connect.mirror.MirrorSourceConnector,\
    source.cluster.alias=source,\
    source.cluster.bootstrap.servers=SOURCE_CLUSTER_BOOTSTRAP_ADDRESS,\
    target.cluster.alias=target,\
    target.cluster.bootstrap.servers=TARGET_CLUSTER_BOOTSTRAP_ADDRESS,\
    tasks.max=3,\
    topics=TOPIC_NAME
    

    Sostituisci quanto segue:

    • CONNECTOR_NAME: un nome per il connettore, ad esempio mm2-connector
    • CONNECT_CLUSTER: il nome del cluster Connect
    • SOURCE_CLUSTER_BOOTSTRAP_ADDRESS: l'indirizzo di bootstrap del cluster di origine, dal passaggio 1.
    • TARGET_CLUSTER_BOOTSTRAP_ADDRESS: l'indirizzo di bootstrap del cluster di destinazione, dal passaggio 2.
    • TOPIC_NAME: il nome dell'argomento da replicare. Questo parametro può anche specificare un elenco di nomi di argomenti separati da virgole o un'espressione regolare.

Il connettore di origine MirrorMaker 2.0 crea un nuovo argomento nel cluster di destinazione denominato "source.TOPIC_NAME", dove TOPIC_NAME è il nome dell'argomento nel cluster di origine.

Visualizza risultati

Per verificare che i messaggi vengano replicati, puoi utilizzare gli strumenti a riga di comando Kafka. Per informazioni sulla configurazione della CLI Kafka, consulta Configurare una macchina client nel documento Produci e utilizza messaggi con la CLI.

Ad esempio, per inviare un messaggio al cluster di origine, inserisci quanto segue nella riga di comando:

export BOOTSTRAP=$(gcloud managed-kafka clusters describe SOURCE_KAFKA_CLUSTER \
 --location=SOURCE_REGION \
 --project=PROJECT_ID \
 --format="value(bootstrapAddress)"
)

for msg in {1..10}; do
  echo "message $msg"
done | kafka-console-producer.sh --topic TOPIC_NAME \
       --bootstrap-server $BOOTSTRAP --producer.config client.properties

Per leggere i messaggi duplicati dal cluster di destinazione, inserisci quanto segue nella riga di comando:

export BOOTSTRAP=$(gcloud managed-kafka clusters describe TARGET_KAFKA_CLUSTER \
 --location=TARGET_REGION \
 --project=PROJECT_ID \
 --format="value(bootstrapAddress)"
)

kafka-console-consumer.sh --topic source.TOPIC_NAME --from-beginning \
 --bootstrap-server $BOOTSTRAP --consumer.config client.properties

L'output è simile al seguente:

message 1
message 2
message 3
message 4
[...]

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Console

  1. Elimina il cluster di connessione.

    1. Vai alla pagina Managed Service per Apache Kafka > Cluster Connect.

      Vai a Connetti cluster

    2. Seleziona il cluster Connect e fai clic su Elimina.

  2. Elimina il cluster Kafka di origine.

    1. Vai alla pagina Managed Service per Apache Kafka > Cluster.

      Vai a Cluster

    2. Seleziona il cluster Kafka e fai clic su Elimina.

  3. Ripeti il passaggio precedente per eliminare il cluster Kafka di destinazione.

gcloud

  1. Per eliminare il cluster Connect, utilizza il comando gcloud managed-kafka connect-clusters delete.

    gcloud managed-kafka connect-clusters delete CONNECT_CLUSTER \
      --location=TARGET_REGION --async
    
  2. Per eliminare il cluster Kafka di origine, utilizza il comando gcloud managed-kafka clusters delete.

    gcloud managed-kafka clusters delete SOURCE_KAFKA_CLUSTER \
      --location=SOURCE_REGION --async
    
  3. Ripeti il passaggio precedente per eliminare il cluster Kafka di destinazione.

    gcloud managed-kafka clusters delete TARGET_KAFKA_CLUSTER \
      --location=TARGET_REGION --async
    

Passaggi successivi