欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~算法
在本文中,咱们将围绕物联网或流处理系统的一些技术问题创建完整的基础和多方面的理解,以便读者在规划物联网系统时可以作出明智的决策或是有根据地提出问题。咱们的意图是为开始考虑流处理和物联网的人们创建多方面的基础,无论你是否真的须要一个流处理器,咱们都将深刻到流处理(物联网的核心)里面,而后讨论 Lambda 架构,并给出一些对传感器能够作什么的大体上的思考。数据库
事件流处理平台就像把瑞士军刀,你可让在数据流里运动的数据(data-in-motion)作几乎任何你想作的事情。
了解 ESP 体系结构的最简单的方法是将其视为三个层面或三个功能 —— 输入,处理和输出。安全
输入层会接受几乎全部类型的基于时间的流数据,并常常有存在多个输入流的状况。在主 ESP 处理器中会发生各类会被称为程序或操做的动做。这些程序的结果会传递给订阅者的一些接口,后者能够经过人机界面发送警报或建立机器来进行自动操做,并将数据传递给像 Fast 和 Forever 这样的数据存储服务里。架构
流处理平台确实能够直接接收数据流,但要注意他们并不善于保存一些会意外丢失的数据,所以你仍然会须要像 Kafka 这样的一个可以回退并重放丢失的数据的数据采集端。在不久的未来,不少流处理器可能会解决这个问题,而后你就须要从新考虑 Kafka 端的必要性了。框架
对流处理器常会有这些要求:机器学习
在采集端进行数据清理的能力(相似于一种迷你 MDM)是其功能强大的真正体现。在数据清理以后会屡次复制数据流,以便每一个相同的数据流能够同时用于不一样的分析程序中,而不用让这些程序程序排队等待前面的分析程序完成分析。下面是一个医疗业务示例的图表,该示例描述了一种在上一章提到过的工做方式,说明了多个数据流会由静态数据来扩大,并会由不一样类型的逻辑同时处理。每一个块都表示了在 ESP 中须要由你来编写的单独程序。分布式
有不少不一样类型的逻辑能够经过这些 ESP 程序来获得应用,包括:函数
主要的开源框架选项(全是 Apache 的)以下:
Samza: 一个分布式的流处理框架。它使用 Kafka 来进行消息传递,由 YARN 来提供容错性、处理器隔离、安全性,以及资源管理。
NiFi:这是一个至关新兴的开源项目,仍处于完善之中。它与其余项目的区别在于它有用户友好的拖曳式的图形界面,以及咱们能够轻松地根据特定需求来对它进行定制。
Storm:一款通过充分测试的基于事件的流处理器。它最初由推特开发。
SPARK Streaming: SPARK Streaming 是 SPARK 的四个组成部分之一,它是第一个能在单一企业级平台上整合批量处理和流处理的组件。oop
SPARK 已被推出好几年了,但在去年它的使用率有了惊人的增加,现已在大多数新项目中取代了 Hadoop / MapReduce 的地位,而且许多既有的 Hadoop / MapReduce 系统也都迁移到了 SPARK。SPARK 的开发工做正在朝着成为物联网应用所需的惟一技术栈发展。学习
SPARK 由五个组件组成,全部这些组件都支持 Scala,Java,Python 还有 R 语言。
相比之下,Storm 就是一个纯粹的事件流处理器。Storm 和 SPARK Streaming 之间的差别不大,不过它们为传入数据分区的方式便大相径庭了。这是后面讨论的一个进一步的话题。
若是你已经熟悉了关于数据分区的知识而且肯定这不会对你的应用形成损害,那么开源的 SPARK / SPARK Streaming 即是最好的选择。
IoT 流处理应用的标准参考体系结构被称为Lambda 体系结构,该体系结构包含一个加速层(Speed Layer)和一个安全层(Safety Layer)。
传入数据流会由数据采集应用(Kafka)复制,并朝两个方向发送,一个是安全层,另外一个是流处理平台(SPARK Streaming 或 Storm)。这能够确保丢失的数据都得以找回,以确保全部数据都至少获得了一次处理。
对流处理端的查询多是提取静态数据来加到流处理器中的数据流,或者可能用于经过任意数量的媒体(包括电子邮件,SMS,客户的应用程序,还有仪表板)向下游的事件消费者发送消息、警报或数据。警报也是在流处理器中的本地环境生成的。
对安全层的存储的查询将被批量用于建立进一步的分析过程并嵌入到流处理器中,或者用于响应特殊查询,例如开发新的预测模型。
你应该在设计物联网平台时考虑到引入流处理器的必要性。对某些只须要不多数量或不多种类的传感器的状况,省掉流处理器自身会带来的系统复杂度可能会更好。
当实时交互的时间至关长的时候,例如在通知终端用户任何新的发现只能天天发生一次或甚至更少时,对传感器的数据进行批量处理在一些状况下是彻底合理的。
从架构的立场来看,传感器数据将到达数据采集应用(Kafka)并直接发送到存储器里面。若使用常规的批处理程序,今天的数据会在夜里被分析,而且须要发送给用户的任何重要信号会放到次日才发送。
当 “实时” 会是 24 小时或更长的时间,在某些状况下至多缩短至 12 小时左右时,批处理会是一个可行的选择。若是实时交互的时间需求比这更短,流处理会是一个更具吸引力的选择。
其实配置流处理来评估任什么时候间段(包括数天,数周甚至数月)的数据也是能够的,但在某些时候简化系统的价值会超过引入流处理的价值。
传感器数据有四种范围很广的应用。这也能够为你决定是否引入流处理提供参考。如下举一些例子。
直接使用:例如,直接从传感器读取 GPS 坐标,而后把坐标放到地图上,就能轻松建立出一个 “手机去哪里” 的小应用。这一应用可能还须要引入与用户有关的静态数据(好比,须要知道用户的居住地址来限制显示地图的比例),而这能够经过标准表链接(standard table join)来在流处理器外部完成,也能够在流处理器里面完成。
专家规则:不用数据科学,编写能为传入数据流赋予意义的规则也是可行的。例如,能够设计了一个专家规则来与患者的静态数据相结合,让这一规则在患者体温达到 103° 的时候呼叫医护帮助。
预测分析:接下来的两个应用程序都属于数据科学领域。数据科学家会使用预测分析技术来在数据中找到有意义的信息。
无监督学习: 在预测分析中,无监督学习意味着应用像聚类(clustering)和细分(segementation)这样的技术,而这些技术不须要指示了特定的结果的历史数据。例如,FitBit 里的加速度计能够很容易地了解到你如今的活动比最近活跃仍是不活跃,或者你比其余一些你拿来比较的 FitBit 用户相对活跃仍是不活跃。给阅读这一过程赋予一些内容就可能须要引入用户的静态数据。
无监督学习的优点在于,它在放置传感器以后几乎就能够当即部署起来,毕竟它不须要花大量时间用训练数据来创建模型。给定发送警报的阈值会须要一些无监督建模方法的帮助。例如一个符合标准的消息的更改周期能够设为应该超出天天 20% 或一个类似用户组的标准差。这些算法会由数据科学家根据批量处理数据进行完善并导出到流处理器中,做为公式应用于数据流。
监督学习:使用训练数据来开发预测模型,而在训练数据中结果是已知的。这又须要部分检测到了行为和当前状态的样例,还有一部分状态未知的样例。
例如,咱们能够记录电机的温度,振动和功耗,以及测量后 12 小时内电机是否发生故障。若是有足够多的训练数据,咱们就能够开发出一个预测模型,提早 12 小时预测可能发生的障碍。而后将以代数公式(几行 C,Java,Python 或 R 代码)形式表示的模型导出到流处理器,以便在处理数据流时对数据进行评分,当分数显示即将发生故障时自动发送警报。
在流处理中使用复杂的预测模型颇有好处。不过若是想要预测的事件很罕见,好比这一事件占全部测量数据的比例很小,或者这一事件须要很长时间才可能发生一次(收集足够的训练数据要等上很长时间),那么收集足够的训练数据就会是个问题。
问答
基于云计算的物联网应用场景有哪些?
相关阅读
启动物联网项目所需的一切:第 1 章
启动物联网项目所需的一切:第 3 章
此文已由做者受权腾讯云+社区发布,原文连接:https://cloud.tencent.com/dev...