Usare MirrorMaker per replicare gli argomenti di Apache Kafka con Kafka in HDInsight

Informazioni su come usare la funzionalità di mirroring di Apache Kafka per replicare gli argomenti in un cluster secondario. È possibile eseguire il mirroring come processo continuo o intermittente per eseguire la migrazione dei dati da un cluster a un altro.

In questo articolo si userà il mirroring per replicare gli argomenti tra due cluster HDInsight. Questi cluster si trovano in reti virtuali diverse in data center diversi.

Avviso

Non usare il mirroring come mezzo per ottenere la tolleranza di errore. L'offset agli elementi all'interno di un argomento è diverso tra i cluster primario e secondario, quindi i client non possono usare i due in modo intercambiabile. Per preservare la tolleranza di errore è necessario impostare la replica per gli argomenti all'interno del cluster. Per altre informazioni, vedere Introduzione ad Apache Kafka in HDInsight.

Funzionamento del mirroring di Apache Kafka

Il mirroring funziona usando lo strumento MirrorMaker , che fa parte di Apache Kafka. MirrorMaker usa i record degli argomenti nel cluster primario e quindi crea una copia locale nel cluster secondario. MirrorMaker usa uno o più consumer che leggono dal cluster primario e un producer che scrive nel cluster locale (secondario).

La configurazione del mirroring più utile per il ripristino di emergenza usa cluster Kafka in aree di Azure diverse. A tale scopo, le reti virtuali in cui risiedono i cluster vengono sottoposte a peering.

Il diagramma seguente illustra il processo di mirroring e il flusso di comunicazione tra i cluster:

Diagramma del processo di mirroring.

I cluster primari e secondari possono differire per numero di nodi e partizioni. Anche gli offset negli argomenti differiscono. Il mirroring mantiene il valore della chiave usato per il partizionamento, quindi l'ordine dei record viene conservato in base alla chiave.

Mirroring tra i limiti di rete

Se è necessario eseguire il mirroring di cluster Kafka in reti diverse, si notino le seguenti considerazioni aggiuntive:

  • Gateway: le reti devono poter comunicare a livello di TCP/IP.

  • Indirizzamento del server: è possibile scegliere di indirizzare i nodi del cluster usando gli indirizzi IP o i nomi di dominio completi.

    • Indirizzi IP: se si configurano i cluster Kafka per l'uso della pubblicità degli indirizzi IP, è possibile procedere con la configurazione del mirroring usando gli indirizzi IP dei nodi broker e dei nodi ZooKeeper.

    • Nomi di dominio: se non si configurano i cluster Kafka per la pubblicità degli indirizzi IP, i cluster devono essere in grado di connettersi tra loro usando nomi di dominio completi (FQDN). Ciò richiede un server DNS (Domain Name System) in ogni rete configurata per inoltrare le richieste alle altre reti. Quando si crea una rete virtuale di Azure, anziché usare il DNS automatico fornito con la rete, è necessario specificare un server DNS personalizzato e l'indirizzo IP per il server. Dopo aver creato la rete virtuale, è necessario creare una macchina virtuale di Azure che usa tale indirizzo IP. Installare e configurare quindi il software DNS.

    Importante

    Creare e configurare il server DNS personalizzato prima di installare HDInsight nella rete virtuale. Non è necessaria alcuna configurazione aggiuntiva per HDInsight per l'uso del server DNS configurato per la rete virtuale.

Per altre informazioni sulla connessione di due reti virtuali di Azure, vedere Configurare una connessione.

Architettura del mirroring

Questa architettura include due cluster in diversi gruppi di risorse e reti virtuali: un database primario e un database secondario.

Passaggi di creazione

  1. Creare due nuovi gruppi di risorse:

    Resource group Location
    kafka-primary-rg Stati Uniti centrali
    kafka-secondary-rg Stati Uniti centro-settentrionali
  2. Creare una nuova rete virtuale kafka-primary-vnet in kafka-primary-rg. Lasciare le impostazioni predefinite.

  3. Creare una nuova rete virtuale kafka-secondary-vnet in kafka-secondary-rg, anche con le impostazioni predefinite.

  4. Creare due nuovi cluster Kafka:

    Nome cluster Resource group Rete virtuale Account di archiviazione
    kafka-primary-cluster kafka-primary-rg kafka-primary-vnet kafkaprimarystorage
    kafka-secondary-cluster kafka-secondary-rg kafka-secondary-vnet kafkasecondarystorage
  5. Creare peering di rete virtuale. Questo passaggio creerà due peering: uno da kafka-primary-vnet a kafka-secondary-vnet e uno da kafka-secondary-vnet a kafka-primary-vnet.

    1. Selezionare la rete virtuale kafka-primary-vnet .

    2. In Impostazioni selezionare Peer.

    3. Selezionare Aggiungi.

    4. Nella schermata Aggiungi peering immettere i dettagli, come illustrato nello screenshot seguente.

      Screenshot che mostra H D Insight Kafka aggiungere il peering di rete virtuale.

Configurare la pubblicità IP

Configurare la pubblicità IP per consentire a un client di connettersi usando indirizzi IP broker anziché nomi di dominio.

  1. Passare al dashboard di Ambari per il cluster primario: https://PRIMARYCLUSTERNAME.azurehdinsight.net.

  2. Selezionare Servizi>Kafka. Selezionare la scheda Configurazioni .

  3. Aggiungere le righe di configurazione seguenti alla sezione del modello kafka-env inferiore. Selezionare Salva.

    # Configure Kafka to advertise IP addresses instead of FQDN
    IP_ADDRESS=$(hostname -i)
    echo advertised.listeners=$IP_ADDRESS
    sed -i.bak -e '/advertised/{/advertised@/!d;}' /usr/hdp/current/kafka-broker/conf/server.properties
    echo "advertised.listeners=PLAINTEXT://$IP_ADDRESS:9092" >> /usr/hdp/current/kafka-broker/conf/server.properties
    
  4. Immettere una nota nella schermata Salva configurazione e selezionare Salva.

  5. Se viene visualizzato un avviso di configurazione, selezionare Continua comunque.

  6. In Salva modifiche di configurazione selezionare OK.

  7. Nella notifica Riavvia obbligatorio selezionare Riavvia riavvia>tutto interessato. Selezionare quindi Conferma riavvia tutto.

    Screenshot che mostra l'opzione Apache Ambari per riavviare tutti gli interessati.

Configurare Kafka per l'ascolto su tutte le interfacce di rete

  1. Restare nella scheda Configurazioni in Servizi>Kafka. Nella sezione Broker Kafka impostare la proprietà listener su PLAINTEXT://0.0.0.0:9092.
  2. Selezionare Salva.
  3. Selezionare Riavvia>Conferma riavvia tutto.

Indirizzi IP del broker di record e indirizzi ZooKeeper per il cluster primario

  1. Selezionare Host nel dashboard di Ambari.

  2. Prendere nota degli indirizzi IP per i broker e ZooKeepers. I nodi broker hanno generato come prime due lettere del nome host e i nodi ZooKeeper hanno zk come prime due lettere del nome host.

    Screenshot che mostra gli indirizzi i p del nodo di visualizzazione Apache Ambari.

  3. Ripetere i tre passaggi precedenti per il secondo cluster , kafka-secondary-cluster: configurare annunci IP, impostare listener e prendere nota degli indirizzi IP broker e ZooKeeper.

Creare argomenti

  1. Connettersi al cluster primario usando SSH:

    ssh sshuser@PRIMARYCLUSTER-ssh.azurehdinsight.net
    

    Sostituire sshuser con il nome utente SSH usato durante la creazione del cluster. Sostituire PRIMARYCLUSTER con il nome di base usato durante la creazione del cluster.

    Per altre informazioni, vedere Usare SSH con HDInsight.

  2. Usare il comando seguente per creare due variabili di ambiente con gli host Apache ZooKeeper e gli host broker per il cluster primario. Sostituire stringhe come ZOOKEEPER_IP_ADDRESS1 con gli indirizzi IP effettivi registrati in precedenza, ad esempio 10.23.0.11 e 10.23.0.7. Lo stesso vale per BROKER_IP_ADDRESS1. Se si usa la risoluzione FQDN con un server DNS personalizzato, seguire questa procedura per ottenere nomi broker e ZooKeeper.

    # get the ZooKeeper hosts for the primary cluster
    export PRIMARY_ZKHOSTS='ZOOKEEPER_IP_ADDRESS1:2181, ZOOKEEPER_IP_ADDRESS2:2181, ZOOKEEPER_IP_ADDRESS3:2181'
    
    # get the broker hosts for the primary cluster
    export PRIMARY_BROKERHOSTS='BROKER_IP_ADDRESS1:9092,BROKER_IP_ADDRESS2:9092,BROKER_IP_ADDRESS2:9092'
    
  3. Per creare un argomento denominato testtopic, usare il comando seguente:

    /usr/hdp/current/kafka-broker/bin/kafka-topics.sh --create --replication-factor 2 --partitions 8 --topic testtopic --zookeeper $PRIMARY_ZKHOSTS
    
  4. Usare il comando seguente per verificare che l'argomento sia stato creato:

    /usr/hdp/current/kafka-broker/bin/kafka-topics.sh --list --zookeeper $PRIMARY_ZKHOSTS
    

    La risposta contiene testtopic.

  5. Usare quanto segue per visualizzare le informazioni sull'host broker per questo cluster (primario):

    echo $PRIMARY_BROKERHOSTS
    

    Verranno restituite informazioni simili al testo seguente:

    10.23.0.11:9092,10.23.0.7:9092,10.23.0.9:9092

    Salvare queste informazioni. Viene usato nella sezione successiva.

Configurare il mirroring

  1. Connettersi al cluster secondario usando una sessione SSH diversa:

    ssh sshuser@SECONDARYCLUSTER-ssh.azurehdinsight.net
    

    Sostituire sshuser con il nome utente SSH usato durante la creazione del cluster. Sostituire SECONDARYCLUSTER con il nome usato durante la creazione del cluster.

    Per altre informazioni, vedere Usare SSH con HDInsight.

  2. Usare un consumer.properties file per configurare la comunicazione con il cluster primario. Per creare il file, usare il comando seguente:

    nano consumer.properties
    

    Usare il testo seguente come contenuto del file consumer.properties:

    bootstrap.servers=PRIMARY_BROKERHOSTS
    group.id=mirrorgroup
    

    Sostituire PRIMARY_BROKERHOSTS con gli indirizzi IP dell'host broker dal cluster primario.

    Questo file descrive le informazioni sul consumer da usare durante la lettura dal cluster Kafka primario. Per altre informazioni, vedere Consumer Configs all'indirizzo kafka.apache.org.

    Per salvare il file, premere CTRL+X, premere Y e quindi premere INVIO.

  3. Prima di configurare il producer che comunica con il cluster secondario, configurare una variabile per gli indirizzi IP broker del cluster secondario. Usare i comandi seguenti per creare questa variabile:

    export SECONDARY_BROKERHOSTS='BROKER_IP_ADDRESS1:9092,BROKER_IP_ADDRESS2:9092,BROKER_IP_ADDRESS2:9092'
    

    Il comando echo $SECONDARY_BROKERHOSTS deve restituire informazioni simili al testo seguente:

    10.23.0.14:9092,10.23.0.4:9092,10.23.0.12:9092

  4. Usare un producer.properties file per comunicare il cluster secondario. Per creare il file, usare il comando seguente:

    nano producer.properties
    

    Usare il testo seguente come contenuto del file producer.properties:

    bootstrap.servers=SECONDARY_BROKERHOSTS
    compression.type=none
    

    Sostituire SECONDARY_BROKERHOSTS con gli indirizzi IP del broker usati nel passaggio precedente.

    Per altre informazioni, vedere Configurazioni producer all'indirizzo kafka.apache.org.

  5. Usare i comandi seguenti per creare una variabile di ambiente con gli indirizzi IP degli host ZooKeeper per il cluster secondario:

    # get the ZooKeeper hosts for the secondary cluster
    export SECONDARY_ZKHOSTS='ZOOKEEPER_IP_ADDRESS1:2181,ZOOKEEPER_IP_ADDRESS2:2181,ZOOKEEPER_IP_ADDRESS3:2181'
    
  6. La configurazione predefinita per Kafka in HDInsight non consente la creazione automatica di argomenti. Prima di avviare il processo di mirroring, è necessario usare una delle opzioni seguenti:

    • Creare gli argomenti nel cluster secondario: questa opzione consente anche di impostare il numero di partizioni e il fattore di replica.

      È possibile creare argomenti in anticipo usando il comando seguente:

      /usr/hdp/current/kafka-broker/bin/kafka-topics.sh --create --replication-factor 2 --partitions 8 --topic testtopic --zookeeper $SECONDARY_ZKHOSTS
      

      Sostituire testtopic con il nome dell'argomento da creare.

    • Configurare il cluster per la creazione automatica degli argomenti: questa opzione consente a MirrorMaker di creare automaticamente gli argomenti. Si noti che potrebbe crearli con un numero diverso di partizioni o un fattore di replica diverso rispetto all'argomento primario.

      Per configurare il cluster secondario per creare automaticamente gli argomenti, seguire questa procedura:

      1. Passare al dashboard di Ambari per il cluster secondario: https://SECONDARYCLUSTERNAME.azurehdinsight.net.
      2. Selezionare Servizi>Kafka. Selezionare quindi la scheda Configurazioni .
      3. Nel campo Filtro immettere il valore auto.create. In questo modo, l'elenco di proprietà verrà filtrato e verrà visualizzata l'impostazione auto.create.topics.enable.
      4. Modificare il valore di auto.create.topics.enable in truee quindi selezionare Salva. Aggiungere una nota e quindi selezionare di nuovo Salva .
      5. Selezionare il servizio Kafka , selezionare Riavvia e quindi selezionare Riavvia tutto interessato. Quando richiesto, selezionare Conferma riavvio tutto.

      Screenshot che mostra come abilitare la creazione automatica degli argomenti nel servizio kafka.

Avviare MirrorMaker

Nota

Questo articolo contiene riferimenti a un termine che Microsoft non usa più. Quando il termine verrà rimosso dal software, verrà rimosso anche dall'articolo.

  1. Dalla connessione SSH al cluster secondario usare il comando seguente per avviare il processo MirrorMaker:

    /usr/hdp/current/kafka-broker/bin/kafka-run-class.sh kafka.tools.MirrorMaker --consumer.config consumer.properties --producer.config producer.properties --whitelist testtopic --num.streams 4
    

    I parametri usati in questo esempio sono i seguenti:

    Parametro Descrizione
    --consumer.config specifica il file che contiene le proprietà del consumer. Queste proprietà vengono usate per creare un consumer che legge dal cluster Kafka primario.
    --producer.config specifica il file che contiene le proprietà del producer. Queste proprietà vengono usate per creare un producer che scrive nel cluster Kafka secondario.
    --whitelist Elenco di argomenti replicati da MirrorMaker dal cluster primario al database secondario.
    --num.streams numero di thread consumer da creare.

    Il consumer nel nodo secondario è ora in attesa di ricevere messaggi.

  2. Dalla connessione SSH al cluster primario, usare il comando seguente per avviare un producer e inviare messaggi all'argomento:

    /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --broker-list $PRIMARY_BROKERHOSTS --topic testtopic
    

    Quando si arriva a una riga vuota con un cursore, digitare alcuni messaggi di testo. I messaggi vengono inviati all'argomento nel cluster primario. Al termine, premere CTRL+C per terminare il processo producer.

  3. Dalla connessione SSH al cluster secondario premere CTRL+C per terminare il processo mirrormaker. Potrebbero essere necessari alcuni secondi per terminare il processo. Per verificare che i messaggi siano stati replicati nel database secondario, usare il comando seguente:

    /usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --bootstrap-server $SECONDARY_BROKERHOSTS --topic testtopic --from-beginning
    

    L'elenco degli argomenti include testtopicora , che viene creato quando MirrorMaster esegue il mirroring dell'argomento dal cluster primario al database secondario. I messaggi recuperati dall'argomento sono uguali a quelli immessi nel cluster primario.

Eliminare il cluster

Avviso

La fatturazione dei cluster HDInsight viene calcolata al minuto, indipendentemente dal fatto che siano usati o meno. Assicurarsi di eliminare il cluster dopo aver finito di usarlo. Vedere Come eliminare un cluster HDInsight.

La procedura descritta in questo articolo ha creato cluster in gruppi di risorse di Azure diversi. Per eliminare tutte le risorse create, è possibile eliminare i due gruppi di risorse creati: kafka-primary-rg e kafka-secondary-rg. L'eliminazione dei gruppi di risorse rimuove tutte le risorse create seguendo questo articolo, inclusi cluster, reti virtuali e account di archiviazione.

Passaggi successivi

In questo articolo si è appreso come usare MirrorMaker per creare una replica di un cluster Apache Kafka . Per trovare altri modi per lavorare con Kafka, vedere i collegamenti seguenti: