使用 Kafka 和 Azure HDInsight 进行大规模流式传输(第一部分):创建 HDInsight Kafka 群集





5.00/5 (1投票)
在本文中,我们将探讨在 Azure HDInsight 上设置 Kafka 群集的简单过程。
鉴于大多数开发人员已经使用 Kafka 多年,许多在基于云的项目中使用过 Kafka 的人,其结果褒贬不一。
云计算提供了许多众所周知的优势,例如可用性和可伸缩性。然而,在云中运行 Kafka 传统上需要至少一名具备 Kafka 管理经验的开发人员来处理群集创建和部署的复杂性。
本文系列探讨了使用 HDInsight 创建和使用 Kafka 群集,这可以提供比以往更流畅的体验。第一部分将介绍无缝的应用程序设置。本系列的第二篇文章将介绍如何使用 HDInsight 将数据流式传输到 Kafka。最后,第三篇文章将演示分析流式数据的过程。
在开始之前,让我们为项目提供一些背景信息。
场景
本次演示模拟了一个全天候运行的全自动面包烘焙坊。为保持简单,假设的工厂只有三台机器:一台搅拌机、一台连续烘烤炉和一台包装机。
每台机器都装有多个传感器,这些传感器将信息输入数据库,工厂利用该数据库进行持续监控和质量控制。有些传感器以亚秒级速率收集信息,而其他传感器则提供时间点读数。
Kafka 提供了一个理想的架构来监督这些数据的收集。在实时环境中,数据将输入机器学习模型。模型结果将确定预期的故障和预测性维护计划。在本例中,数据将输入 NoSQL 数据库。主要重点是数据的收集。
以下是模拟烘焙坊中的机器和传感器的摘要。它还包含生成数据的信息。
Machine | Sensor | 单位 | 预期值 | 标准差 | 每秒读数 |
搅拌机 | 质量 | 千克 | 150 | 4 | 0.2 |
搅拌机 | 旋转 | 转速 | 80 | 20 | 连续 |
搅拌机 | 填充压力 | kPa | 500 | 60 | 10 |
搅拌机 | 碗温 | 摄氏度 | 25 | 1 | 10 |
烘烤炉 | 烘烤炉速度 | 米/秒 | 0.2 | 0.05 | 连续 |
烘烤炉 | 发酵温度 | 摄氏度 | 28 | 0.5 | 1 |
烘烤炉 | 烘烤炉温度 1 | 摄氏度 | 180 | 2 | 5 |
烘烤炉 | 烘烤炉温度 2 | 摄氏度 | 180 | 0.5 | 5 |
烘烤炉 | 烘烤炉温度 3 | 摄氏度 | 220 | 0.1 | 10 |
烘烤炉 | 冷却温度 1 | 摄氏度 | 15 | 2 | 2 |
烘烤炉 | 冷却温度 2 | 摄氏度 | 15 | 5 | 1 |
包装 | 包装速度 | 米/秒 | 0.2 | 0.05 | 连续 |
包装 | 包装计数器 | 每秒数量 | 5 | 0.1 | 10 |
注意:示例假定高可用性,以便公司可以扩展数据库以供其他工厂使用。
架构
Azure 在设置 HDInsight 群集时有一些要求。例如,选择少于三个 ZooKeeper 节点可以使初始验证通过。但是,在实例化过程中,部署会停止,因为它需要至少三个这样的节点。
虽然这可以通过重新配置来解决,但本文使用了 Azure 所需的最低数量。由于许多 Azure 服务都使用 ZooKeeper 节点,因此最好不要干扰现有功能。
首先,我们需要创建一个 HDInsight 群集。该群集由 Apache Kafka 和 Apache Spark 群集组成。Kafka 群集包含典型的 ZooKeeper 和 Broker 节点,而 Spark 群集则包含 Head 和 Worker 节点。
实现
有多种方法可以设置 HDInsight 群集,并且有大量的文档和文章对此进行了描述。在本教程中,我们将使用最简单的方法,即在 Azure 门户中使用自定义部署模板。
Microsoft 使部署自定义模板变得容易。此外,GitHub 上提供了JSON 文件的编辑版本可供上传。
登录 Azure 门户后,链接会将用户引导至“自定义模板”页面,在那里他们可以按照要求输入信息。
建议创建一个新的资源组来封装整个部署。因此,完成后删除部署的过程非常简单,只需要删除资源组即可。
这里有几点值得一提。
首先,设置 Kafka 群集需要多个虚拟机,每个虚拟机有多个核心。对于基本帐户,我们可能需要增加所选区域的配额。我们可以通过从门户用户界面打开服务请求来做到这一点。
其次,Azure 按小时收取群集中使用的资源的费用。这些费用按分钟按比例收费。这意味着只要群集处于活动状态,Azure 用户就开始付费。因此,请务必记住在练习完成后删除资源组。
我们的需求的“环境”类别是“高端”。为了减少一些费用,可以降低模板中的虚拟机规格。这应该在填写字段值之前完成,因为保存模板更改将擦除任何输入的字段值。
要开始修改模板,请点击页面顶部附近的 **编辑模板**。
在模板文件中的两个群集部分中,有一个名为 computeProfile
的部分。
"computeProfile": { "roles": [ {
每个虚拟机的描述都位于 roles
标记内。可以在此处设置实例计数和机器大小。
"roles": [ { "name": "headnode", "targetInstanceCount": "2", "hardwareProfile": { "vmSize": "Standard_D12_v2" }, "osProfile": {
使用 Ctrl-F 查找 vmSize
的出现。然后将每个替换为 Standard_E2_v3
。E2 是一个小型虚拟机,有两个核心。模板部署的群集是为了实时、容错运行。这对于最终部署非常理想,但对于我们的需求来说并非必需。
此时,这些是唯一必需的更改。
点击 **查看并创建**。然后 Azure 开始部署过程。此过程可能需要 20 到 45 分钟,具体取决于所选区域的系统负载。
模拟
为了模拟小型烘焙坊的流程,有必要编写并部署一个 Kafka producer 应用程序。该程序将以各种速率生成模拟机器传感器读数。
producer.py 应用程序是一个简单的 Python 脚本,可以从命令行进行配置。默认选项允许快速测试,这提供了相当大的灵活性。当通过 shell 执行时,可以执行许多并发的程序副本。基本上,开发人员可以向 Kafka 提供任意数量的副本。
为了完成此过程,请提交一个 PySpark sink 作业,该作业将分析传入的数据。由于 PySpark 是声明性的,因此声明所需的处理,然后等待结果。这将在本系列的最后一篇文章中进一步探讨。
您可以在 GitHub 上查看完整的应用程序,以完成本系列的其余部分。
结论
在 HDInsight 上设置 Kafka 群集是一个简单的一步式过程。它不需要任何 Kafka 管理技能。
使用 Kafka 有许多好处。它在复制、结构化流、按顺序交付和数据转换方面表现出色。Kafka 在本地或 Azure 上性能相同。
主要区别在于设置。任何以前设置过多节点 Kafka 群集的开发人员都知道这有多困难。因此,他们通常会委托 Kafka 管理员来完成这项任务。
使用 HDInsight 进行此设置消除了麻烦,也无需涉及第三方。创建群集只需要在表单上填写几项信息。它处理此过程的简便性是无与伦比的。点击进入本系列第二部分,了解如何将数据流式传输到 Kafka。
要了解有关 HDInsight 中的大规模流式处理以及 Azure HDInsight 中的 Apache Kafka 的更多信息,请参阅这些Microsoft Azure 开发人员社区资源。