Compartir a través de


Conexión de un clúster de Kafka de HDInsight con una máquina virtual de cliente de otra red virtual

En este artículo, se describen los pasos para configurar la conectividad entre una máquina virtual (VM) y un clúster de Kafka en HDInsight que residen en dos redes virtuales (VNet) diferentes.

Conexión de un clúster de Kafka de HDInsight con una máquina virtual de cliente de otra red virtual

  1. Cree dos redes virtuales diferentes en las que, por un lado, se hospedará el clúster de Kafka en HDInsight y, por otro lado, la máquina virtual. Para más información, consulte Creación de una red virtual mediante Azure Portal.

  2. Empareje estas dos redes virtuales, de modo que las direcciones IP de sus subredes no se superpongan entre sí. Para más información, consulte Conexión de redes virtuales con emparejamiento de redes virtuales mediante Azure Portal.

  3. Asegúrese de que el estado de emparejamiento se muestre como conectado.

    Captura de pantalla en la que muestra el emparejamiento de red virtual.

  4. Cree un clúster de Kafka en HDInsight en la primera red virtual hdi-primary-vnet. Para más información, consulte Creación de un clúster de Kafka en HDInsight.

  5. Cree una máquina virtual (VM) en la segunda red virtual hilo-secondary-vnet. Al crear la máquina virtual, especifique el segundo nombre de red virtual donde se debe implementar esta máquina virtual. Para obtener más información, consulte Creación de una máquina virtual Linux en Azure Portal.

    Nota

    Las direcciones IP de las máquinas virtuales de Kafka nunca cambian si la máquina virtual está presente en el clúster. Solo cuando se reemplaza manualmente la máquina virtual del clúster, esa dirección IP cambia. Puede comprobar las direcciones IP más recientes desde el portal de Ambari.

Métodos para conectarse al clúster de Kafka en HDInsight desde la máquina virtual cliente

  1. Configuración de Kafka para anunciar direcciones IP: use Kafka IP advertising para rellenar las direcciones IP privadas del nodo de trabajo de Kafka en otra red virtual. Una vez realizado el anuncio de direcciones IP, use la configuración de DNS privada para la resolución DNS del FQDN de los nodos de trabajo.
  2. Actualice el archivo /etc/hosts en la máquina cliente: actualice el archivo /etc/hosts de la máquina cliente con el archivo /etc/hosts del nodo principal o de trabajo de Kafka.

Nota

  • La configuración del DNS privado es opcional después del anuncio de direcciones IP. Esto solo es necesario cuando se desea usar el FQDN de los nodos de trabajo de Kafka con el nombre de dominio DNS privado en lugar de las direcciones IP privadas.
  • Las direcciones IP de las máquinas virtuales de Kafka nunca cambian si la máquina virtual está presente en el clúster. Solo cuando se reemplaza manualmente la máquina virtual del clúster, esa dirección IP cambia. Puede comprobar las direcciones IP más recientes desde el portal de Ambari.

Configuración de Kafka para anunciar direcciones IP

Esta configuración permite al cliente conectarse mediante direcciones IP de agente en lugar de nombres de dominio. De manera predeterminada, Apache Zookeeper devuelve el nombre de dominio de los agentes de Kafka a los clientes.

Esta configuración no funciona con el cliente de software de VPN, ya que no puede usar la resolución de nombres para entidades de la red virtual.

Use los pasos siguientes para configurar Kafka en HDInsight para anunciar direcciones IP en lugar de nombres de dominio:

  1. Vaya a https://CLUSTERNAME.azurehdinsight.net desde un explorador web. Reemplace CLUSTERNAME por el nombre del clúster de Kafka en HDInsight.

  2. Cuando se le solicite, use el username y la password para el clúster. Aparece la interfaz de usuario web de Ambari para el clúster.

  3. Para ver información sobre Kafka, seleccione Kafka en el panel izquierdo y, después, seleccione configuraciones.

    Captura de pantalla en la que se muestran las configuraciones de red virtual de Kafka.

  4. Para acceder a la configuración kafka-env en el panel de Ambari, solo tiene que escribir kafka-env en el campo de filtro superior derecho en la interfaz de usuario de Ambari.

    Captura de pantalla en la que se muestra el entorno de Kafka.

  5. Para configurar Kafka y anunciar direcciones IP, agregue el texto siguiente en la parte inferior del campo kafka-env-template:

     # 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 
    
  6. Para configurar la interfaz en que escucha Kafka, escriba listeners en el campo Filtrar que se encuentra en la esquina superior derecha.

  7. Para configurar Kafka para que escuche en todas las interfaces de red, cambie el valor del campo listeners (agentes de escucha) a PLAINTEXT://0.0.0.0:9092.

  8. Use el botón Save para guardar los cambios en la configuración. Escriba un mensaje de texto para describir los cambios. Seleccione OK una vez que se guarden los cambios.

    Captura de pantalla en la que se muestra el botón Guardar.

  9. Para evitar errores al reiniciar Kafka, use el botón Actions y seleccione Turn On Maintenance Mode. Seleccione OK para completar esta operación.

    Captura de pantalla en la que se muestra el botón de acción.

  10. Para reiniciar Kafka, use el botón Restart y seleccione Restart All Affected (Reiniciar todos los elementos afectados). Confirme el reinicio y use el botón OK una vez que se complete la operación.

    Captura de pantalla en la que se muestra cómo reiniciar.

  11. Para deshabilitar el modo de mantenimiento, use el botón Actions y seleccione Turn Off Maintenance Mode. Seleccione OK para completar esta operación.

  12. Ahora puede ejecutar los trabajos desde la máquina virtual cliente con la dirección IP de Kafka. Para comprobar la dirección IP de los nodos de trabajo desde el portal de Ambari, haga clic en Hosts en el panel izquierdo.

    Captura de pantalla en la que se muestra la dirección IP del nodo de trabajo para Ambari.

  13. Use el repositorio Git de ejemplo para crear temas de Kafka](https://github.com/Azure-Samples/hdinsight-kafka-java-get-started) para generar y consumir datos de ese tema.

    # In previous example IP of worker node 0 is `broker1-ip` and worker node 1 is `broker2-ip`
    # Create Kafka Topic 
    java -jar kafka-producer-consumer.jar create <topic_name> $KAFKABROKERS
    java -jar kafka-producer-consumer.jar create test broker1-ip:9092,broker1-ip:9092
    

    Captura de pantalla en la que se muestra cómo crear un tema de Kafka.

    # Produce Data in Topic
    java -jar kafka-producer-consumer.jar producer <topic_name> $KAFKABROKERS
    java -jar kafka-producer-consumer.jar producer test broker1-ip:9092, broker2-ip:9092
    

    Captura de pantalla en la que se muestra cómo ver el productor de Kafka.

    # Consume Data from Topic
    java -jar kafka-producer-consumer.jar consumer <topic_name> $KAFKABROKERS
    java -jar kafka-producer-consumer.jar consumer test broker1-ip:9092,broker2-ip:9092
    

    Captura de pantalla en la que se muestra la sección del consumidor de Kafka.

    Nota

    Se recomienda agregar todas las direcciones IP de los agentes en $KAFKABROKERS para la tolerancia a errores.

Actualización del archivo /etc/hosts en la máquina cliente

  1. Copie las entradas de nodos de trabajo resaltadas del archivo /etc/host desde el nodo principal de Kafka a la máquina virtual cliente.

  2. Después de aplicar estas entradas, intente llegar al panel de Ambari/Kafka mediante el explorador web o comando curl mediante el nombre de dominio completo hn0 o hn1, como:

    Si la máquina virtual cliente usa el sistema operativo Linux

    # Execute curl command  
    curl hn0-hdi-ka.mvml5coqo4xuzc1nckq1sltcxf.bx.internal.cloudapp.net:8080 
    
    # Output
    <!--
    * Licensed to the Apache Software Foundation (ASF) under one
    * or more contributor license agreements.  See the NOTICE file
    * distributed with this work for additional information
    * regarding copyright ownership.  The ASF licenses this file
    * to you under the Apache License, Version 2.0 (the
    * "License"); you may not use this file except in compliance
    * with the License.  You may obtain a copy of the License at
    *
    *     http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing, software
    * distributed under the License is distributed on an "AS IS" BASIS,
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the License for the specific language governing permissions and
    * limitations under the License.
    -->
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link rel="stylesheet" href="stylesheets/vendor.css">
      <link rel="stylesheet" href="stylesheets/app.css">
      <script src="javascripts/vendor.js"></script>
      <script src="javascripts/app.js"></script>
      <script>
          $(document).ready(function() {
              require('initialize');
              // make favicon work in firefox
              $('link[type*=icon]').detach().appendTo('head');
              $('#loading').remove();
          });
      </script>
      <title>Ambari</title>
      <link rel="shortcut icon" href="/img/logo.png" type="image/x-icon">
    </head>
    <body> 
        <div id="loading">...Loading...</div>
        <div id="wrapper">
        <!-- ApplicationView -->
        </div>
        <footer>
            <div class="container footer-links">
                <a data-qa="license-link" href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Licensed under the Apache License, Version 2.0</a>.
                <a data-qa="third-party-link" href="/licenses/NOTICE.txt" target="_blank">See third-party tools/resources that Ambari uses and their respective authors</a>
             </div>
        </footer>
    </body>
    </html> 
    

Si la máquina virtual cliente usa el sistema operativo Windows

  1. Vaya a la página de información general de hdi-kafka y haga clic en la vista de Ambari para obtener la dirección URL.

  2. Coloque la credencial de inicio de sesión como nombre de usuario admin y contraseña YOUR_PASSWORD, que ha establecido al crear el clúster.

    Nota

    1. En la máquina virtual Windows, los nombres de host estáticos deben agregarse en el archivo de host que se encuentra en la ruta de acceso C:\Windows\System32\drivers\etc\.
    2. En este artículo, se supone que el servidor de Ambari está activo en Head Node 0. Si el servidor de Ambari está activo en Head Node 1, use el nombre de dominio completo de hn1 para acceder a la interfaz de usuario de Ambari.

    Captura de pantalla que muestra el panel.

  3. También puede enviar mensajes al tema kafka y leer los temas de la máquina virtual. Para hacerlo, puede intentar usar esta aplicación Java de ejemplo.

  4. Use el repositorio Git de ejemplo para crear temas de Kafka, y generar y consumir datos de ese tema. Para más información, consulte hdinsight-kafka-java-getting-started.

  5. Puede usar el FQDN, dirección IP o nombre corto (primeras seis letras del nombre del clúster) de los agentes para pasar como KAFKABROKERS en los siguientes comandos.

     # In the previous example       # IP of worker node 0 is `broker1-ip` and worker node 1 is `broker2-ip`
     # Short Name of worker node 0 is `wn0-hdi-ka` and worker node 1 is `wn1-hdi-ka`      # FQDN of worker node 0 is `wn0-hdi-ka.mvml5coqo4xuzc1nckq1sltcxf.bx.internal.cloudapp.net` and worker node 1 is `wn1-hdi-ka.mvml5coqo4xuzc1nckq1sltcxf.bx.internal.cloudapp.net`
    
     # Create Kafka Topic 
          java -jar kafka-producer-consumer.jar create <topic_name> $KAFKABROKERS
          java -jar kafka-producer-consumer.jar create test broker1-ip:9092,broker2-ip:9092
    
     # Produce Data in Topic
          java -jar kafka-producer-consumer.jar producer <topic_name> $KAFKABROKERS
          java -jar kafka-producer-consumer.jar producer test wn0-hdi-ka:9092,wn1-hdi-ka:9092
    
     # Consume Data from Topic
          java -jar kafka-producer-consumer.jar consumer <topic_name> $KAFKABROKERS
          java -jar kafka-producer-consumer.jar consumer test wn0-hdi-ka.mvml5coqo4xuzc1nckq1sltcxf.bx.internal.cloudapp.net:9092,wn1-hdi-ka.mvml5coqo4xuzc1nckq1sltcxf.bx.internal.cloudapp.net:9092
    

Nota

Se recomienda agregar todos los agentes de direcciones IP, FQDN o nombre corto en $KAFKABROKERS para la tolerancia a errores.