将 HDInsight Kafka 群集与不同 VNet 中的客户端 VM 连接
本文介绍设置驻留在两个不同虚拟网络 (VNet) 中的虚拟机 (VM) 与 HDInsight Kafka 群集之间的连接的步骤。
将 HDInsight Kafka 群集与不同 VNet 中的客户端 VM 连接
创建两个不同的虚拟网络,分别托管 HDInsight Kafka 群集和 VM。 有关详细信息,请参阅使用 Azure 门户创建虚拟网络。
将这两个虚拟网络对等互连,以便其子网的 IP 地址不会相互重叠。 有关详细信息,请参阅通过 Azure 门户使用虚拟网络对等互连连接虚拟网络。
确保对等互连状态显示为“已连接”。
在第一个 VNet
hdi-primary-vnet
中创建 HDInsight Kafka 群集。 有关详细信息,请参阅创建 HDInsight Kafka 群集。在第二个 VNet
hilo-secondary-vnet
中创建虚拟机 (VM)。 创建 VM 时,请指定必须部署此虚拟机的第二个 VNet 的名称。 有关详细信息,请参阅在 Azure 门户中创建 Linux 虚拟机。注意
如果群集中存在 VM,则 Kafka VM 的 IP 永远不会更改。 仅当手动替换群集中的 VM 时,该 IP 才会更改。 可以从 Ambari 门户检查最新的 IP。
从客户端 VM 连接到 HDInsight Kafka 群集的方法
- 为 Kafka 配置 IP 播发:使用
Kafka IP advertising
填充不同 vnet 中的 Kafka 工作器节点专用 IP。 完成 IP 播发后,使用专用 DNS 设置对工作器节点 FQDN 进行 DNS 解析。 - 更新客户端计算机中的 /etc/hosts 文件:使用 Kafka 头/工作器节点的
/etc/hosts
文件更新客户端计算机中的/etc/hosts
文件。
注意
- IP 播发后,专用 DNS 的设置是可选的。 仅当你想要将 Kafka 工作器节点的 FQDN 与专用 DNS 域名(而不是专用 IP)结合使用时,才需要这样做。
- 如果群集中存在 VM,则 Kafka VM 的 IP 永远不会更改。 仅当手动替换群集中的 VM 时,该 IP 才会更改。 可以从 Ambari 门户检查最新的 IP。
为 IP 播发配置 Kafka
此配置允许客户端使用中转站 IP 地址而不是域名进行连接。 默认情况下,Apache Zookeeper 向客户端返回 Kafka 中转站的域名。
此配置不适用于 VPN 软件客户端,因为它无法对虚拟网络中的实体使用名称解析。
使用以下步骤将 HDInsight Kafka 配置为播发 IP 地址而不是域名:
使用 Web 浏览器转到
https://CLUSTERNAME.azurehdinsight.cn
。 将CLUSTERNAME
替换为 HDInsight Kafka 群集名称。出现提示时,使用群集的 HTTPS
username
和password
。 将显示群集的 Ambari Web UI。若要查看有关 Kafka 的信息,请从左侧面板中选择
Kafka
,然后选择配置。若要访问 Ambari 仪表板上的
kafka-env
配置,只需在 Ambari UI 中右上方的筛选器字段中键入kafka-env
。要配置 Kafka 以播发 IP 地址,请将下列文本添加到“
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
要配置 Kafka 侦听的接口,请在右上方的“筛选器”字段中输入
listeners
。要将 Kafka 配置为侦听所有网络接口,请将“
listeners
”字段的值更改为“PLAINTEXT://0.0.0.0:9092
”。使用“
Save
”按钮保存配置更改。 输入描述更改的文本消息。 保存更改后,请选择“OK
”。要防止在重启 Kafka 时出错,请使用“
Actions
”按钮,并选择“Turn On Maintenance Mode
”。 选择“OK
”完成此操作。要重启 Kafka,请使用“
Restart
”按钮,然后选择“Restart All Affected
”。 确认重启,在操作完成后再使用“OK
”按钮。要禁用维护模式,请使用“
Actions
”按钮,然后选择“Turn Off Maintenance Mode
”。 选择“OK
”完成此操作。现在,可以使用 Kafka IP 地址从客户端 VM 执行作业。 要从 Ambari 门户检查工作器节点的 IP 地址,请单击左侧面板上的“
Hosts
”。使用示例 git 存储库创建 Kafka 主题 (https://github.com/Azure-Samples/hdinsight-kafka-java-get-started),以生成和使用来自该主题的数据。
# 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
# 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
# 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
注意
建议在 $KAFKABROKERS 中添加所有中转站 IP,实现容错。
更新客户端计算机中的 /etc/hosts 文件
将文件
/etc/host
的突出显示的工作器节点条目从 Kafka 头节点复制到客户端 VM。创建这些条目后,尝试使用 Web 浏览器或 curl 命令访问 Kafka Ambari 仪表板,将 hn0 或 hn1 FQDN 用作:
如果客户端 VM 使用 Linux OS
# Execute curl command curl hn0-hdi-ka.mvml5coqo4xuzc1nckq1sltcxf.bx.internal.chinacloudapp.cn: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>
如果客户端 VM 使用 Windows OS
转到
hdi-kafka
的概述页面,然后单击“Ambari 视图”获取 URL。将创建群集时设置的用户名
admin
和密码YOUR_PASSWORD
作为登录凭据。注意
- 在 Windows VM 中,需要将静态主机名添加到路径
C:\Windows\System32\drivers\etc\
中存在的主机文件中。 - 本文假定 Ambari 服务器在
Head Node 0
上处于活动状态。 如果 Ambari 服务器在Head Node 1
上处于活动状态,请使用 hn1 的 FQDN 访问 Ambari UI。
- 在 Windows VM 中,需要将静态主机名添加到路径
还可以将消息发送到 kafka 主题,并从 VM 中读取主题。 为此,可以尝试使用此示例 Java 应用程序。
使用示例 git 存储库创建 Kafka 主题,生成和使用该主题中的数据。 有关详细信息,请参阅 hdinsight-kafka-java-getting-started。
可以使用中转站的 FQDN、IP 或短名称(群集名称的前六个字母)来传递,如以下命令中的
KAFKABROKERS
。# 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.chinacloudapp.cn` and worker node 1 is `wn1-hdi-ka.mvml5coqo4xuzc1nckq1sltcxf.bx.internal.chinacloudapp.cn` # 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.chinacloudapp.cn:9092,wn1-hdi-ka.mvml5coqo4xuzc1nckq1sltcxf.bx.internal.chinacloudapp.cn:9092
注意
建议在 $KAFKABROKERS 中添加所有中转站 IP,FQDN 或短名称以实现容错。