
# Kuiper边云协同流数据处理集成方案设计
[EMQ X Kuiper](https://www.emqx.io/)是由杭州映云科技有限公司开发，用Golang 实现的轻量级物联网边缘分析、流式处理开源软件，可以运行在各类资源受限的终端设备上。Kuiper 设计的主要目标是将在云端运行的实时流式计算框架（比如 [Apache Spark](https://spark.apache.org/)，[Apache Storm](https://storm.apache.org/) 和 [Apache Flink](https://flink.apache.org/) 等）迁移到边缘。Kuiper 参考了上述云端流式处理项目的架构与实现，结合边缘流式数据处理的特点，采用了编写基于源 (Source)，SQL (业务逻辑处理), 目标 (Sink) 的规则引擎来实现边缘端的流式数据处理。
本文介绍了EMQ X Kuiper与华为云IEF的集成解决方案，主要有：
- 如何利用 IEF systemrest-\>servicebus 通道进行 Kuiper 容器的管理，包括流、规则和插件的管理。
- 如何利用IEF eventbus-\>APIG，或者 eventbus-\> DIS 数据通道，将 Kuiper 的流式处理结果发送至云端的华为 DIS 大数据服务，或者自有的应用等。
#### 整体方案
图1架构图   
![](https://support.huaweicloud.com/accessg-ief/zh-cn_image_0237961221.png "点击放大")
上图中方案构成的系统完成了如下能力：
1. 通过IEF构建的数据通道对边缘侧数据集成组件的生命周期进行管理。
2. 通过IEF的配置通道对边缘侧数据集成规则进行配置。该规则为可处理流数据的SQL语句。
3. 通过IEF将边缘侧获取到的数据转入相应的云服务或用户自己部署在云端的应用中。
4. 边缘侧的Kuiper Container负责对接边缘侧其他系统获取数据。
5. 边缘侧Kuiper的数据处理函数和数据源为插件式，可以由社区、ISV或华为等开发并预置。该插件也可以由IEF在云端进行管理进行插拔。
该方案由如下几个角色构成，在实际项目中可能其中的某些角色是合并为一个实体的：
- 华为云IEF 提供IEF服务，提供整合了Kuiper的边缘、边云数据集成系统。
  

- EMQ 提供对边缘侧数据集成组件Kuiper的商业支持。
  

- 插件开发者 根据业务需求在Kuiper上开发对应的source和数据处理function。
  

- 业务开发者 使用IEF提供的整合式数据集成平台，配置边缘侧数据处理逻辑，配置数据到云端服务的转发规则，在云端部署应用对边缘侧数据进行消费处理。
  
 
#### 集成测试User Story
针对这个解决方案，您可以设计如下User Story，并完成测试验证。
1. 作为一个最终用户，我需要从华为云商店购买kuiper，以便使用kuiper提供的功能。 购买成功后，测试是否可正常使用
   
2. 作为一个最终用户，我需要部署kuiper至我的边缘节点，以便使用kuiper提供的功能。
   ![](https://support.huaweicloud.com/accessg-ief/public_sys-resources/note_3.0-zh-cn.png)
   Kuiper后续将会上架华为云商店，暂时只能在IEF页面部署方式验证。
   1. 上传Kuiper镜像至华为云SWR服务。
   
   2. 在IEF中注册边1缘节点，具体方法请参见[边缘节点 \> 注册边缘节点](https://support.huaweicloud.com/usermanual-ief/ief_01_0003.html#section1)。
   
   3. 在边缘节点安装边缘软件，具体方法请参见[边缘节点 \> 纳管边缘节点](https://support.huaweicloud.com/usermanual-ief/ief_01_0003.html#section2)。
   
   4. 在边缘节点部署kuiper应用，具体方法请参见[容器应用 \> 创建边缘应用](https://support.huaweicloud.com/usermanual-ief/ief_01_0003.html#section2)。
    
3. 作为一个最终用户，我需要更新kuiper版本，以便使用新版本kuiper的功能。
   - 上传kuiper新版本镜像至华为云SWR服务。
   
   - 在IEF容器应用界面，进入指定的kuiper应用详情页，更新kuiper应用。 ![](https://support.huaweicloud.com/accessg-ief/zh-cn_image_0237915535.png "点击放大")
     
    
4. 作为一个最终用户，我需要部署一个新的插件至已存在的指定kuiper应用，以便使用Kuiper新增插件的能力.
   ![](https://support.huaweicloud.com/accessg-ief/public_sys-resources/note_3.0-zh-cn.png)
   kuiper需要提供一个API用于增加插件。
   1. 上传插件至OBS。
   
   2. 调用云上的API发送增加插件的请求到指定的kuiper。
   
   3. Kuiper收到请求后，到指定的地址下载插件并启动。
    
5. 作为一个最终用户，我需要更新或删除已存在的指定kuiper应用上的插件，以便随时修改Kuiper的业务能力。
   ![](https://support.huaweicloud.com/accessg-ief/public_sys-resources/note_3.0-zh-cn.png)
   kuiper需要提供两个API：更新插件、删除插件。
   1. 上传插件至OBS（更新时的步骤）。
   
   2. 调用云上的API发送更新/删除插件的请求到指定的kuiper。
   
   3. Kuiper收到请求后，到指定的地址下载插件并更新或者直接删除。
    
6. 作为一个最终用户，我需要配置kuiper应用的数据采集规则，以便收集需要的数据。
   ![](https://support.huaweicloud.com/accessg-ief/public_sys-resources/note_3.0-zh-cn.png)
   Kuiper需要创建一个API用于在边缘侧获取数据。
   1. 在IEF创建systemrest-\>servicebus的消息路由，详细方法请参见[云端下发消息至边缘节点](https://support.huaweicloud.com/usermanual-ief/ief_01_0062.html)。
      ![](https://support.huaweicloud.com/accessg-ief/zh-cn_image_0237915536.png "点击放大")
      
   
   2. 调用IEF接口发送Kuiper SQL配置请求至边缘侧指定的kuiper应用。
    
7. 作为一个最终用户，我需要配置数据路由规则，使边缘产生的数据上传至云端的我的服务。
   1. 注册一个消费数据的API至[华为云API网关](https://www.huaweicloud.com/product/apig.html)服务。
   
   2. 在IEF界面创建一个APIG类型的消息端点，请参见[边云消息概述](https://support.huaweicloud.com/usermanual-ief/ief_01_0018.html)。
   
   3. 在IEF创建syseventbus-\>APIG的消息路由。
    
8. 作为一个最终用户，我需要部署应用至云端，消费从kuiper上传的数据。
   1. 部署云端的应用。
   
   2. 注册上述云端应用消费数据的API至华为云APIG服务。
   
   3. 在IEF界面创建一个APIG类型的消息端点，请参见[边云消息概述](https://support.huaweicloud.com/usermanual-ief/ief_01_0018.html)。
   
   4. 在IEF创建syseventbus-\>APIG的消息路由。
   
   5. kuiper发送数据。
    
9. 作为一个最终用户，我需要查询kuiper的状态以及数据如何端到端传输的。
   源---\>addressing---\>IEF数据通道---\>云端---\>云端其他服务
   1. 在IEF容器应用界面获取Kuiper的状态。
   
   2. 在IEF边云消息界面获取消息传输情况。
   
   3. 从AOM服务获取应用的监控和日志。
     
 
#### 参考文档
- [EMQ的Kuiper项目](https://github.com/emqx/kuiper/blob/master/README-CN.md)
- [IEF服务用户指南](https://support.huaweicloud.com/usermanual-ief/ief_01_0001.html)
- [IEF边云消息介绍](https://support.huaweicloud.com/usermanual-ief/ief_01_0063.html)
 
