物联网 秒级数据存储 物联网数据处理流程
物联网带来了全新的数据世界,实时流媒体要求,运营困难,安全性以及需要大规模使用的大量海量数据。使用最好的开源工具可以解决许多这些挑战。您的流处理框架将可以使用全新的数据世界。在本文中,我将向您展示如何解决这些问题并从批处理流向流程。
介绍
设备可以非常频繁地输出大量数据,这对于企业来说,从早期开始到历史预测都是有价值的。该设备数据通常来自板载或连接的传感器,可测量GPS,温度,湿度,气压,亮度,飞行时间,气体,电力,空气质量和运动等因素。一旦我们从设备上的传感器获取数据,我们就需要能够将这些数据传输到远程服务器以进行大规模处理。这样做有一些警告。首先,我们需要在许多设备和接收器之间建立安全通道。我们还需要能够处理每秒发送的数百万个设备记录。如果我们无法处理它,我们就会失去这些实时数据的价值。我们还需要能够过滤,警报,路由,组合,让我们将问题分解为可管理的步骤。
品种、数量、速度、数据的可变性
首先,我们需要了解数据。消费者和商业领域都有许多物联网设备,每个设备都能快速生成多种类型的数据。此数据可以是固定模式,频繁更改,可以是非常稀疏,数字或二进制。对于这个现实,以及数据的绝对数量和速度,我建议使用边缘客户端和接收服务器来处理任何类型的数据。幸运的是,它作为Apache NiFi存在于开源领域。您可以轻松拥有数千个具有数十个数据点的设备,每个数据点每秒报告一次,这可以轻松增长到数TB的数据。
设备数据
设备数据的实例可能如下所示:
cputemp: 56.7
Memory: 22.6
Y: 471
设备数据通常是数字的,需要转换,并且出现在通常不变的值(有时是二进制或字符串)的大量流中。在开始在设备上本地测试数据之前,您永远不会知道可能会得到什么。例如,我可以从LTR-559光和接近传感器读取数据,并将接收十进制数据或整数,范围从小于1到64,000。您必须找出您的数据范围。一旦您知道,您就可以构建一个AVRO模式,以确保数据范围的准确性。这还允许您在MiniFi或ApacheCalcite SQL中使用Apache NiFi在路由器或网关级别以及更高级别查询设备上的数据。当您使用边缘设备时,能够接受包括大字符串,JSON,图像,大型数字和非结构化数据在内的多种类型的数据至关重要。
您还必须使用数百种不同的设备,不同的传感器,不同版本的传感器和设备,不同的操作系统以及其他因素。请参阅我之前的文章和我的GitHub页面上的示例。
边缘处理
正如我们所提到的,我们有许多不变的数据,可能不需要每秒都发送到远程源。我们可能希望每15分钟或每小时发送一次定期数据。我们绝对希望立即发送任何警报条件或更改。因此,我们需要一些能够分析数据并在边缘采取行动的能力。MiniFi C ++或Java代理是很好的选择。我们希望在边缘收集数据以及路由和监控它。这是我们可以检查边缘值并设置警报条件以触发立即操作的位置(例如重新启动服务)或联系我们的远程资源的地方。为了实现更强大的转换和丰富,我们通常在边缘处或附近有一个流管理解决方案,通常在同一建筑物或网络中,以托管Apache NiFi服务器或小型集群。
交通选择
接下来,我们需要将读取传感器的设备的数据传输到另一台机器。第一步通常是本地路由器/网关,例如流管理引擎。在我们将流发送到另一台服务器进行处理,分析和存储之前,这可以进行一些聚合并在本地网络协议上运行。对于运输选项,我建议有三个选项。第一种是使用MiniFi的HTTPS传输,它可以通过IoT网络层中的几乎任何路由器,网关或代理。这样可以安全,快速,可靠地传输数据而不会丢失数据并具有完整的数据来源和谱系。
第二个选项是允许MiniFi通过MMSTT发送您的消息,这是一种快速且开放的消息传递协议,尽管此选项将减少MiniFi的一些数据来源和沿袭。最后一个选项适用于具有可用卡片的云或内部网络中的物联网。使用MiniFi直接向ApacheKafka发送消息可以允许持久的队列存储大量数据并允许许多消费者。所有主流处理框架都支持以流方式从Apache Kafka读取。我在现实世界中看到的最佳方法是使用MiniFi的S2SHTTPS传输到Apache NiFi集群,该集群可以在通过Apache Kafka将其路由到另一个流处理框架之前进行更多过滤,对话,路由,聚合和清理。
数据沿袭和来源
在摄取设备数据和流处理时最困难的事情之一是系统的分布式特性。您正在许多设备,网络,云,系统,计算机,容器,VM和系统上运行。事件可能会失败或被复制,如果您没有所涉及的所有步骤和所有跃点的完整血统,则很难监视。Apache NiFi提供了丰富的数据集,可以通过多种方式轻松处理,因为它采用JSON格式。
这可以通过Apache NiFi本身或我们可以将这些深度日志发送到的任何其他处理或监视工具来完成。
流处理
一旦数据开始通过Apache Kafka流入我们的流处理引擎,我们就可以开始进行高级分析,窗口化,连接,复杂聚合,机器学习,深度学习等。我建议您使用Kafka Streams,Spark Streaming或Streaming Analytics Manager进行复杂的流处理。
但这是在Apache NiFi执行路由,丰富,转换,清理和预过滤数据并分配ita架构之后。如果没有模式,我们的流处理框架就不那么高效,并且经常需要推断出您的模式对于不同程度的成功。它们非常精彩,具有固定记录,其中包含可以位于标题中的模式,嵌入在AVRO数据中或通过REST API提供的模式注册表中。如果您已完成MapReduce或Spark编程,Kafka Streams允许您以您熟悉的方式进行一些流处理。您可以执行聚合,计数,减少,分组或窗口化聚合。我有一个简单的例子,您可以在我的GitHub页面上看到,使用Java开发一个非常简单的Kafka Streams微服务,用于处理从Apache NiFi通过Apache Kafka发送的数据。在我的例子中,我正在检查我发送MQTT消息的警报状况。当然,我可以在Kafka Streams应用程序中做更多的事情。
总结
我们已经看到,我们可以使用开源工具大规模收集,路由,监控,转换,丰富和处理设备数据。由于边缘设备的性质和它们发送的恒定数据流,这个过程变得更加复杂。使用正确的开源工具,我们可以快速轻松地完成此过程。
上一篇: java物联网处理数据
下一篇: 关于七人普数据处理的思考