如何将 Kafka 群集与不同 VNet 中的 VM 连接

本文档列出了在 VM 与驻留在两个不同 VNet 中的 HDI Kafka 之间建立连接时必须遵循的步骤。

  1. 创建两个不同的 VNet,分别托管 HDInsight Kafka 群集和 VM。 有关详细信息,请参阅使用 Azure 门户创建虚拟网络

    注意

    这两个 VNet 必须对等互连,以便其子网的 IP 地址不会相互重叠。 有关详细信息,请参阅通过 Azure 门户使用虚拟网络对等互连连接虚拟网络

  2. 确保对等互连状态显示为“已连接”。

    Screenshot showing Kafka event peering.

  3. 完成上述步骤后,可以在一个 VNet 中创建 HDInsight Kafka 群集。 有关详细信息,请参阅创建 Apache Kafka 群集

  4. 在第二个 VNet 中创建虚拟机。 创建 VM 时,请指定必须部署此虚拟机的第二个 VNet 的名称。 有关详细信息,请参阅在 Azure 门户中创建 Linux 虚拟机

  5. 完成此步骤后,可以将文件 /etc/host 的条目从 Kafka 头节点复制到 VM。

    Screenshot showing host file output.

  6. 从文件中删除 headnodehost 字符串条目。 例如,上图包含 IP 10.0.0.16 的 headnodehost 条目。 删除后,它将作为

    Screenshot showing modified host file output.

  7. 创建这些条目后,尝试使用 curl 命令访问 Kafka Ambari 仪表板,使用 hn0 或 hn1 FQDN 作为

    从 Linux VM

    curl hn0-vnetka.glarbkztnoqubmzjylls33qnse.bx.internal.chinacloudapp.cn:8080 
    

    输出:

    "<!-- 
    * 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>.        <br /> 
    
             <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>"
    

    从 Windows VM

    Screenshot showing windows VM output.

    注意

    1. 在 Windows VM 中,静态主机名会添加到路径 C:\Windows\System32\drivers\etc\ 中存在的文件主机中
    2. 本文档假定 Ambari 服务器在 hn0 上处于活动状态。 如果 Ambari 服务器在 hn1 上处于活动状态,请使用 hn1 的 FQDN 访问 Ambari UI。
  8. 还可以将消息发送到 kafka 主题,并从 VM 中读取主题。 为此,可以尝试使用此示例 Java 应用程序:https://github.com/Azure-Samples/hdinsight-kafka-java-get-started

    请确保使用命令在 Kafka 群集中创建主题

    java -jar kafka-producer-consumer.jar create <topic_name> $KAFKABROKERS
    
  9. 创建主题后,可以使用以下命令生成和使用。 $KAFKABROKERS 必须适当地替换为文档中提到的代理工作器节点 FQDN 和端口。

    java -jar kafka-producer-consumer.jar producer test $KAFKABROKERS `
    java -jar kafka-producer-consumer.jar consumer test $KAFKABROKERS 
    
  10. 执行此步骤后,你会获得一个输出,作为

    生成者输出:

    Screenshot showing Kafka producer output VM.

    使用者输出:

    Screenshot showing Kafka consumer output.