热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

EMQ物联网边缘流式数据处理软件Kuiper正式开源

全球领先的开源物联网软件提供商EMQ(Github项目)于2019年10月23日正式开源了一个边缘端的超轻量级流式数据处理项目EMQXKuiper(以下简称Kuipe

全球领先的开源物联网软件提供商 EMQ (Github 项目) 于2019年10月23日正式开源了一个边缘端的超轻量级流式数据处理项目 EMQ X Kuiper(以下简称 Kuiper)。随着 Kuiper 的发布,EMQ 将加快在物联网中间件领域的布局,从而形成从消息接入到数据处理,从边缘到云端的物联网中间件软件全领域覆盖。

物联网边缘计算新需求

2019 年作为 5G 商用元年,随着 5G 部署的深入,边缘计算也已经日渐流行。边缘计算通过在靠近接入网的机房增加计算能力,可以,

  • 大幅降低业务时延
  • 减少对网络的带宽压力,降低传输成本
  • 减少在云端的数据存储成本
  • 提高内容分发效率提升用户体验

物联网边缘计算很大一部分指的是流数据的处理,所谓流数据是一组顺序、大量、快速、连续到达的数据序列,一般情况下,流数据可被视为一个随时间延续而无限增长的动态数据集合。流式数据处理可以帮助用户实时了解系统设备的状态,并对异常情况作出快速响应。在边缘端的计算资源(CPU,内存等)不像在云端丰富,因此传统的流式数据处理框架类似于 Apache Storm 或者 Apache Flink 等,由于其安装包过大,或者部署结构与过程过于复杂,运行时的高消耗等原因,并不适合于在这些资源受限的边缘设备(工控机、网关,或者配置不高的 X86 服务器等设备)上运行。而 EMQ 开源的 Kuiper 就是为了解决在物联网边缘设备上的这些问题。

Kuiper 特点


  • 轻量级:安装包约 7MB左右;不依赖于第三方的库与运行时,下载解压后即可运行,安装和使用非常方便
  • 跨操作系统支持:目前可以运行在 Linux 和 Mac 上,后续版本已规划会支持 Windows 操作系统
  • 使用简单,快速应对敏捷业务变化:用户可以通过写 SQL 来实现业务处理;如果业务有变化,只需更新相关的 SQL 语句即可,而无需进行复杂的应用开发和部署
  • 内置支持 MQTT 消息的处理:作为物联网领域的事实协议标准,Kuiper 内置了对接 EMQ X 等 MQTT 消息服务器,实现对来自于物联网消息处理的无缝对接
  • 可扩展性:Kuiper 定义了扩展接口,后续版本已经规划扩展实现不同消息源处理和处理后数据的沉淀(sink)
  • 可管理性:Kuiper 定义了管理接口,后续版本已经规划可以通过 REST API 来实现这些业务规则的定义和管理等操作

Kuiper 应用场景

Kuiper 可以应用在各类边缘计算的场景中,典型应用场景包括,

  • 车间的工业网关:实时分析来自于生产线的数据,并将分析结果推送至云端。车间本地可视化系统,或者远程监控系统可以查看生产线的实时状态
  • 车联网车机:实时分析汽车总线的数据,经过分析将有价值的数据推送至云端或者本地存储,车载系统或者用户的手机应用可以实时查看汽车的状态
  • 智能家居网关:通过实时分析家居采集的各类数据,将重要的结果通过本地显示设备,或者通过云端发送给用户的手机应用,实现对家庭设备的即时状态管理与控制

以上各类应用场景很好体现了边缘计算的价值:实时本地数据处理,提升用户体验;在本地数据处理,还提高了数据安全性,保护个人隐私;节省网络带宽和云端存储成本。Kuiper 可以运行在这些计算资源不足的边缘设备上,低成本地实现边缘端的流式数据处理。

Kuiper 组件概述

如下图所示,Kuiper Server 包括了三部分,分别为

  • Engines:这部分为核心的处理引擎,主要功能包括了 SQL 解析,SQL 运行时和流式数据处理框架等
  • RPC 接口:RPC 接口主要用于跟客户端命令行工具的交互。包括流定义与管理,规则定义与管理,查询工具等
  • Rest API 接口:Rest API 主要用于将来的管理接口,以及在计划中的管理界面的交互。包括流定义与管理,规则定义与管理,查询工具等

在这里插入图片描述

Kuiper 使用步骤概述

Kuiper 的使用过程与传统的流式工具类似,主要包括三步:流定义,规则定义,提交规则执行

  1. 流定义:这个步骤主要用于定义数据源流出的数据格式,类似于传统关系型数据库中定义表结构的过程。如下所示定义了一个名为 demo 的数据流

    # bin/cli create stream demo '(temperature float, humidity bigint) WITH (FORMAT="JSON", DATASOURCE="demo")'

  2. 规则定义:该步骤主要用于定义以下三部分内容

    • 数据源(Source):这部分指定被处理的数据从何而来,在 SQL 的 FROM 语句中指定,就是在上一步中定义好的流的名称
    • 数据业务处理(Process):这部分制定了如何处理数据,主要通过 SQL 语句的 SELECT、JOIN、GROUP、WINDOW(时间窗口),以及各种函数来实现
    • 数据沉淀(Sink):这部分指定在数据处理完成后,将处理后的数据沉淀至相应的目标。目前支持将数据沉淀到 log 和 MQTT 服务器

    {"sql": "SELECT * from demo where temperature > 30","actions": [{"log": {}}]
    }

    如上所示,定义了一个规则,从名称为 demo 的流中,取出温度大于30的数据,并将满足条件的数据输出到日志文件中。规则可以保存在一个文本文件中,比如 myRule

  3. 提交规则执行

    # bin/cli create rule ruleDemo -f myRule

    完成规则后,通过创建规则命令就可以将其提交。满足条件的数据将被输出至日志文件。

    ...
    [{"humidity":17,"temperature":60}]
    [{"humidity":59,"temperature":68}]
    [{"humidity":67,"temperature":31}]
    [{"humidity":5,"temperature":45}]
    [{"humidity":34,"temperature":97}]
    [{"humidity":90,"temperature":73}]
    [{"humidity":72,"temperature":59}]
    [{"humidity":39,"temperature":72}]
    [{"humidity":76,"temperature":92}]
    [{"humidity":23,"temperature":40}]
    [{"humidity":74,"temperature":91}]
    [{"humidity":50,"temperature":76}]
    [{"humidity":77,"temperature":44}]
    ...


开始使用

读者可以通过按照在 Github 上的教程文档来完成 Kuiper 的首次体验。Kuiper 项目基于 Apache 2.0 开源协议,在使用过程中发现任何问题可以直接在项目中提交。


推荐阅读
  • 无服务器_云原生数据湖架构中的无服务器 Kafka
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了云原生数据湖架构中的无服务器Kafka相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 实时计算既有Flink,为何又推出个StreamPark?
    StreamPark2.0.0版本于2023年2月21日正式发布,有流处理需求的开发者可以通过StreamPark官网以及GitHub去下载apache配置 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文介绍了在Cpp中将字符串形式的数值转换为int或float等数值类型的方法,主要使用了strtol、strtod和strtoul函数。这些函数可以将以null结尾的字符串转换为long int、double或unsigned long类型的数值,且支持任意进制的字符串转换。相比之下,atoi函数只能转换十进制数值且没有错误返回。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • 本文介绍了关于Java异常的八大常见问题,包括异常管理的最佳做法、在try块中定义的变量不能用于catch或finally的原因以及为什么Double.parseDouble(null)和Integer.parseInt(null)会抛出不同的异常。同时指出这些问题是由于不同的开发人员开发所导致的,不值得过多思考。 ... [详细]
  • TableAPI报一下异常:FieldtypesofqueryresultandregisteredTableSink
    报错信息如下:Exceptioninthread“main”org.apache.flink.table.api.ValidationException:Fieldtypesofq ... [详细]
  • 你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路 ... [详细]
author-avatar
前前后后zzyyix
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有