Use MirrorMaker to replicate Apache Kafka topics with Kafka on HDInsight (Utilizar o MirrorMaker para replicar tópicos do Apache Kafka com o Kafka no HDInsight)

Saiba como utilizar a funcionalidade de espelhamento do Apache Kafka para replicar tópicos para um cluster secundário. Pode executar o espelhamento como um processo contínuo ou intermitentemente para migrar dados de um cluster para outro.

Neste artigo, irá utilizar o espelhamento para replicar tópicos entre dois clusters do HDInsight. Estes clusters encontram-se em redes virtuais diferentes em datacenters diferentes.

Aviso

Não utilize o espelhamento como forma de alcançar a tolerância a falhas. O deslocamento para itens dentro de um tópico é diferente entre os clusters primário e secundário, pelo que os clientes não podem utilizar os dois alternadamente. Se estiver preocupado com a tolerância a falhas, deve definir a replicação para os tópicos no cluster. Para obter mais informações, veja Introdução ao Apache Kafka no HDInsight.

Como funciona o espelhamento do Apache Kafka

O espelhamento funciona com a ferramenta MirrorMaker , que faz parte do Apache Kafka. O MirrorMaker consome registos de tópicos no cluster primário e, em seguida, cria uma cópia local no cluster secundário. O MirrorMaker utiliza um (ou mais) consumidores que leem a partir do cluster primário e um produtor que escreve no cluster local (secundário).

A configuração de espelhamento mais útil para a recuperação após desastre utiliza clusters do Kafka em diferentes regiões do Azure. Para tal, as redes virtuais onde os clusters residem estão em modo de peering.

O diagrama seguinte ilustra o processo de espelhamento e como a comunicação flui entre clusters:

Diagrama do processo de espelhamento.

Os clusters primários e secundários podem ser diferentes no número de nós e partições, e os desvios dentro dos tópicos também são diferentes. O espelhamento mantém o valor de chave utilizado para a criação de partições, pelo que a ordem dos registos é preservada numa base por chave.

Espelhamento entre limites de rede

Se precisar de espelhar entre clusters do Kafka em redes diferentes, existem as seguintes considerações adicionais:

  • Gateways: as redes têm de conseguir comunicar ao nível do TCP/IP.

  • Endereçamento do servidor: pode optar por abordar os nós de cluster com os respetivos endereços IP ou nomes de domínio completamente qualificados.

    • Endereços IP: se configurar os clusters do Kafka para utilizar a publicidade de endereços IP, pode prosseguir com a configuração do espelhamento com os endereços IP dos nós do mediador e dos nós do ZooKeeper.

    • Nomes de domínio: se não configurar os clusters do Kafka para publicidade de endereços IP, os clusters têm de conseguir ligar-se uns aos outros através de nomes de domínio completamente qualificados (FQDNs). Isto requer um servidor de sistema de nomes de domínio (DNS) em cada rede configurada para reencaminhar pedidos para as outras redes. Quando estiver a criar uma rede virtual do Azure, em vez de utilizar o DNS automático fornecido com a rede, tem de especificar um servidor DNS personalizado e o endereço IP do servidor. Depois de criar a rede virtual, tem de criar uma máquina virtual do Azure que utilize esse endereço IP. Em seguida, instale e configure o software DNS no mesmo.

    Importante

    Crie e configure o servidor DNS personalizado antes de instalar o HDInsight na rede virtual. Não é necessária nenhuma configuração adicional para o HDInsight utilizar o servidor DNS configurado para a rede virtual.

Para obter mais informações sobre como ligar duas redes virtuais do Azure, veja Configurar uma ligação.

Arquitetura de espelhamento

Esta arquitetura inclui dois clusters em diferentes grupos de recursos e redes virtuais: um primário e um secundário.

Passos de criação

  1. Criar dois novos grupos de recursos:

    O grupo de recursos A localização
    kafka-primary-rg E.U.A. Central
    kafka-secondary-rg E.U.A. Centro-Norte
  2. Crie uma nova rede virtual kafka-primary-vnet no kafka-primary-rg. Deixe as predefinições.

  3. Crie uma nova rede virtual kafka-secondary-vnet no kafka-secondary-rg, também com as predefinições.

  4. Criar dois novos clusters do Kafka:

    Nome do cluster Grupo de recursos Rede virtual Conta de armazenamento
    kafka-primary-cluster kafka-primary-rg kafka-primary-vnet kafkaprimarystorage
    kafka-secondary-cluster kafka-secondary-rg kafka-secondary-vnet kafkasecondarystorage
  5. Criar peerings de rede virtual. Este passo irá criar dois peerings: um de kafka-primary-vnet a kafka-secondary-vnet e outro de volta de kafka-secondary-vnet para kafka-primary-vnet.

    1. Selecione a rede virtual kafka-primary-vnet .

    2. Em Definições, selecione Peerings.

    3. Selecione Adicionar.

    4. No ecrã Adicionar peering , introduza os detalhes, conforme mostrado na seguinte captura de ecrã.

      Captura de ecrã que mostra o H D Insight Kafka a adicionar peering de rede virtual.

Configurar a publicidade IP

Configure a publicidade IP para permitir que um cliente se ligue através de endereços IP do mediador, em vez de nomes de domínio.

  1. Aceda ao dashboard do Ambari para o cluster primário: https://PRIMARYCLUSTERNAME.azurehdinsight.net.

  2. Selecione Serviços>Kafka. Selecione o separador Configurações .

  3. Adicione as seguintes linhas de configuração à secção de modelo kafka-env inferior. Selecione Guardar.

    # 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. Introduza uma nota no ecrã Guardar Configuração e selecione Guardar.

  5. Se receber um aviso de configuração, selecione Continuar Mesmo Assim.

  6. Em Guardar Alterações de Configuração, selecione OK.

  7. Na notificação Reiniciar Obrigatório , selecione Reiniciar Reiniciar>Tudo Afetado. Em seguida, selecione Confirmar Reiniciar Tudo.

    Captura de ecrã a mostrar a opção Apache Ambari para reiniciar todos os afetados.

Configurar o Kafka para escutar em todas as interfaces de rede

  1. Mantenha-se no separador Configurações em Serviços>Kafka. Na secção Mediador do Kafka , defina a propriedade de serviços de escuta como PLAINTEXT://0.0.0.0:9092.
  2. Selecione Guardar.
  3. Selecione Reiniciar>Confirmar Reiniciar Tudo.

Endereços IP do mediador de registos e endereços ZooKeeper para o cluster primário

  1. Selecione Anfitriões no dashboard do Ambari.

  2. Tome nota dos endereços IP para os mediadores e ZooKeepers. Os nós do mediador foram apresentados como as duas primeiras letras do nome do anfitrião e os nós do ZooKeeper têm zk como as duas primeiras letras do nome do anfitrião.

    Captura de ecrã que mostra os endereços i p do nó de vista do Apache Ambari.

  3. Repita os três passos anteriores para o segundo cluster, kafka-secondary-cluster: configurar publicidade IP, definir serviços de escuta e tomar nota dos endereços IP do mediador e do ZooKeeper.

Criar tópicos

  1. Ligue-se ao cluster primário através de SSH:

    ssh sshuser@PRIMARYCLUSTER-ssh.azurehdinsight.net
    

    Substitua sshuser pelo nome de utilizador SSH que utilizou ao criar o cluster. Substitua PRIMARYCLUSTER pelo nome base que utilizou ao criar o cluster.

    Para obter mais informações, veja Utilizar o SSH com o HDInsight.

  2. Utilize o seguinte comando para criar duas variáveis de ambiente com os anfitriões do Apache ZooKeeper e anfitriões de mediador para o cluster primário. Substitua cadeias como ZOOKEEPER_IP_ADDRESS1 pelos endereços IP reais registados anteriormente, como 10.23.0.11 e 10.23.0.7. O mesmo se aplica a BROKER_IP_ADDRESS1. Se estiver a utilizar a resolução FQDN com um servidor DNS personalizado, siga estes passos para obter nomes de mediador 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. Para criar um tópico com o nome testtopic, utilize o seguinte comando:

    /usr/hdp/current/kafka-broker/bin/kafka-topics.sh --create --replication-factor 2 --partitions 8 --topic testtopic --zookeeper $PRIMARY_ZKHOSTS
    
  4. Utilize o seguinte comando para verificar se o tópico foi criado:

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

    A resposta contém testtopic.

  5. Utilize o seguinte para ver as informações do anfitrião do mediador para este cluster (o principal):

    echo $PRIMARY_BROKERHOSTS
    

    Esta ação devolve informações semelhantes ao seguinte texto:

    10.23.0.11:9092,10.23.0.7:9092,10.23.0.9:9092

    Guarde esta informação. É utilizado na secção seguinte.

Configurar espelhamento

  1. Ligue-se ao cluster secundário com uma sessão SSH diferente:

    ssh sshuser@SECONDARYCLUSTER-ssh.azurehdinsight.net
    

    Substitua sshuser pelo nome de utilizador SSH que utilizou ao criar o cluster. Substitua SECONDARYCLUSTER pelo nome que utilizou ao criar o cluster.

    Para obter mais informações, veja Utilizar o SSH com o HDInsight.

  2. Utilize um consumer.properties ficheiro para configurar a comunicação com o cluster primário. Para criar o ficheiro, utilize o seguinte comando:

    nano consumer.properties
    

    Utilize o seguinte texto como o conteúdo do consumer.properties ficheiro:

    bootstrap.servers=PRIMARY_BROKERHOSTS
    group.id=mirrorgroup
    

    Substitua pelos PRIMARY_BROKERHOSTS endereços IP do anfitrião do mediador do cluster primário.

    Este ficheiro descreve as informações de consumidor a utilizar ao ler a partir do cluster primário do Kafka. Para obter mais informações, veja Configurações de Consumidor em kafka.apache.org.

    Para guardar o ficheiro, prima Ctrl+X, prima Y e, em seguida, prima Enter.

  3. Antes de configurar o produtor que comunica com o cluster secundário, configure uma variável para os endereços IP do mediador do cluster secundário. Utilize os seguintes comandos para criar esta variável:

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

    O comando echo $SECONDARY_BROKERHOSTS deve devolver informações semelhantes ao seguinte texto:

    10.23.0.14:9092,10.23.0.4:9092,10.23.0.12:9092

  4. Utilize um producer.properties ficheiro para comunicar o cluster secundário. Para criar o ficheiro, utilize o seguinte comando:

    nano producer.properties
    

    Utilize o seguinte texto como o conteúdo do producer.properties ficheiro:

    bootstrap.servers=SECONDARY_BROKERHOSTS
    compression.type=none
    

    Substitua pelos SECONDARY_BROKERHOSTS endereços IP do mediador utilizados no passo anterior.

    Para obter mais informações, veja Producer Configs (Configurações de Produtor) em kafka.apache.org.

  5. Utilize os seguintes comandos para criar uma variável de ambiente com os endereços IP dos anfitriões ZooKeeper para o cluster secundário:

    # get the ZooKeeper hosts for the secondary cluster
    export SECONDARY_ZKHOSTS='ZOOKEEPER_IP_ADDRESS1:2181,ZOOKEEPER_IP_ADDRESS2:2181,ZOOKEEPER_IP_ADDRESS3:2181'
    
  6. A configuração predefinida do Kafka no HDInsight não permite a criação automática de tópicos. Tem de utilizar uma das seguintes opções antes de iniciar o processo de espelhamento:

    • Criar os tópicos no cluster secundário: esta opção também lhe permite definir o número de partições e o fator de replicação.

      Pode criar tópicos antecipadamente com o seguinte comando:

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

      Substitua testtopic pelo nome do tópico a criar.

    • Configurar o cluster para a criação automática de tópicos: esta opção permite que o MirrorMaker crie tópicos automaticamente. Tenha em atenção que pode criá-las com um número diferente de partições ou um fator de replicação diferente do tópico primário.

      Para configurar o cluster secundário para criar tópicos automaticamente, execute estes passos:

      1. Aceda ao dashboard do Ambari para o cluster secundário: https://SECONDARYCLUSTERNAME.azurehdinsight.net.
      2. Selecione Serviços>Kafka. Em seguida, selecione o separador Configurações .
      3. No campo Filtro , introduza um valor de auto.create. Esta ação filtra a lista de propriedades e apresenta a auto.create.topics.enable definição.
      4. Altere o valor de auto.create.topics.enable para truee, em seguida, selecione Guardar. Adicione uma nota e, em seguida, selecione Guardar novamente.
      5. Selecione o serviço Kafka , selecione Reiniciar e, em seguida, selecione Reiniciar todos os afetados. Quando lhe for pedido, selecione Confirmar reiniciar tudo.

      Captura de ecrã que mostra como ativar tópicos de criação automática no serviço kafka.

Iniciar o MirrorMaker

Nota

Este artigo contém referências a um termo que a Microsoft já não utiliza. Quando o termo for removido do software, iremos removê-lo deste artigo.

  1. A partir da ligação SSH ao cluster secundário, utilize o seguinte comando para iniciar o 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
    

    Os parâmetros utilizados neste exemplo são:

    Parâmetro Description
    --consumer.config Especifica o ficheiro que contém as propriedades do consumidor. Utilize estas propriedades para criar um consumidor que lê a partir do cluster primário do Kafka.
    --producer.config Especifica o ficheiro que contém as propriedades do produtor. Utilize estas propriedades para criar um produtor que escreve no cluster secundário do Kafka.
    --whitelist Uma lista de tópicos que o MirrorMaker replica do cluster primário para o secundário.
    --num.streams O número de threads de consumidor a criar.

    O consumidor no nó secundário está agora à espera de receber mensagens.

  2. A partir da ligação SSH ao cluster primário, utilize o seguinte comando para iniciar um produtor e enviar mensagens para o tópico:

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

    Quando chegar a uma linha em branco com um cursor, escreva algumas mensagens SMS. As mensagens são enviadas para o tópico no cluster primário. Quando terminar, prima Ctrl+C para terminar o processo de produtor.

  3. A partir da ligação SSH ao cluster secundário, prima Ctrl+C para terminar o processo do MirrorMaker. Pode demorar vários segundos a terminar o processo. Para verificar se as mensagens foram replicadas para a secundária, utilize o seguinte comando:

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

    A lista de tópicos inclui testtopicagora , que é criada quando o MirrorMaster espelha o tópico do cluster primário para o secundário. As mensagens obtidas do tópico são as mesmas que introduziu no cluster primário.

Eliminar o cluster

Aviso

A faturação dos clusters do HDInsight é proporcional por minuto, quer os utilize ou não. Certifique-se de que elimina o cluster depois de o utilizar. Veja como eliminar um cluster do HDInsight.

Os passos neste artigo criaram clusters em diferentes grupos de recursos do Azure. Para eliminar todos os recursos criados, pode eliminar os dois grupos de recursos criados: kafka-primary-rg e kafka-secondary-rg. Eliminar os grupos de recursos remove todos os recursos criados ao seguir este artigo, incluindo clusters, redes virtuais e contas de armazenamento.

Passos seguintes

Neste artigo, aprendeu a utilizar o MirrorMaker para criar uma réplica de um cluster do Apache Kafka . Utilize as seguintes ligações para descobrir outras formas de trabalhar com o Kafka: