LF Edge eKuiper 是一款可以运行在各类资源受限硬件上的轻量级物联网边缘分析、流式处理开源软件。eKuiper 的一个主要目标在边缘端提供一个实时流式计算框架(与 Apache Flink 类似)。eKuiper 的规则引擎允许用户使用基于 SQL 方式,或者 Graph 方式的规则,几分钟内快速创建边缘端的分析应用。
应用场景
eKuiper 可以运行在各类物联网的边缘使用场景中,比如,
- 工业物联网中对生产线数据进行实时处理;
- 车联网中的车机对来自汽车总线数据的即时分析;
- 智慧能源场景中,风电和大规模储能场景中进行实时分析;
通过 eKuiper 在边缘端的处理,可以提升系统响应速度,节省网络带宽费用和存储成本,以及提高系统安全性等。
-
超轻量
- 核心服务安装包约 4.5MB,首次运行内存使用约 10MB
-
跨平台
- CPU 架构:X86 AMD * 32/64; ARM * 32/64; PPC
- 常见 Linux 发行版、OpenWrt 嵌入式系统、MacOS、Docker
- 工控机、树莓派、工业网关、家庭网关、MEC 边缘云等
-
完整的数据分析
- 数据抽取、转换和过滤
- 数据排序、分组、聚合、连接
- 60+ 各类函数,覆盖数学运算、字符串处理、聚合运算和哈希运算等
- 4 类时间窗口,以及计数窗口
-
高可扩展性
可支持通过 Golang 或者 Python 在
源 (Source)
,SQL 函数
,目标 (Sink)
三个方面的扩展- 源 (Source) :允许用户接入更多的数据源用于数据分析
- 目标(Sink):允许用户将分析结果发送到不同的扩展系统中
- SQL 函数:允许用户增加自定义函数用于数据分析(比如,AI/ML 的函数调用)
-
管理能力
- 免费基于 Web 的管理控制台,用于可视化管理
- 通过命令行、REST API 和 config map 对流、规则和插件进行管理
- 与 KubeEdge、OpenYurt、K3s、Baetyl 等基于边缘 Kubernetes 框架的集成能力
-
与 EMQX 产品集成
你可通过以下途径与 EMQ 社区及开发者联系:
欢迎你将任何 bug、问题和功能请求提交到 lf-edge/ekuiper。
欢迎订阅社区日历 。
欢迎参加社区周会,每周五早上 10:30(北京时间)举行。
感谢您的贡献!请参阅 CONTRIBUTING.md 获取详细信息。
- 使用 JMeter MQTT 插件来发送数据到 EMQX 服务器,消息类似于
{"temperature": 10, "humidity" : 90}
, 温度与湿度的值是介于 0 ~ 100 之间的随机整数值 - eKuiper 从 EMQX 服务器订阅消息,并且通过 SQL 分析数据:
SELECT * FROM demo WHERE temperature > 50
- 分析结果通过 文件插件 写到本地的文件系统里
设备 | 每秒发送消息数 | CPU 使用 | 内存 |
---|---|---|---|
树莓派 3B+ | 12k | sys + user: 70% | 20M |
AWS t2.micro (x86: 1 Core * 1 GB) Ubuntu 18.04 |
10k | sys + user: 25% | 20M |
-
一个 Go 应用 用于向 ZeroMQ 消息总线发送数据,数据如下。
{ "Device": "demo", "Created": 000, … "readings": [ {"Name": "Temperature", value: "30", "Created":123 …}, {"Name": "Humidity", value: "20", "Created":456 …} ] }
-
eKuiper 从 EdgeX ZeroMQ 消息总线订阅数据,并且使用
SELECT * FROM demo WHERE temperature > 50
来分析数据,其中 90% 数据被规则所过滤。 -
分析结果将被发送到 nop sink,所有的数据都被忽略。
每秒发送消息数 | CPU 使用 | 内存 | |
---|---|---|---|
AWS t2.micro( 1 Core * 1 GB) Ubuntu18.04 |
11.4 k | sys+user: 75% | 32M |
- 8000 条规则,总吞吐量为 800 条消息/秒
- 配置
- AWS 2 核 * 4GB 内存
- Ubuntu
- 资源消耗
- 内存: 89% ~ 72%
- CPU: 25%
- 400KB - 500KB / 规则
- 规则
- 源: MQTT
- SQL:
SELECT temperature FROM source WHERE temperature > 20
(90% 数据被过滤) - 目标: 日志
- 300 条规则,处理一个共享流
- MQTT 源吞吐量为 500 条消息/秒
- 总的消息处理吞吐量为 150,000 条消息/秒
- 配置
- AWS 2 核 * 2GB 内存
- Ubuntu
- 资源消耗
- 内存: ~95MB
- CPU: 50%
- 规则
- 源: MQTT
- SQL:
SELECT temperature FROM source WHERE temperature > 20
(90% 数据被过滤) - 目标: 90% nop 10% MQTT
请参考测试指南进行该基准测试。
请到官网查看最新的文档
- Go version >= 1.18
-
编译二进制:
-
编译二进制文件:
$ make
-
编译支持 EdgeX 的二进制文件:
$ make build_with_edgex
-
编译核心包的二进制文件:
$ make build_core
-
-
安装文件打包:
-
安装文件打包::
$ make pkg
-
支持 EdgeX 的安装文件打包:
$ make pkg_with_edgex
-
-
Docker 镜像:
$ make docker
Docker 镜像默认支持 EdgeX
项目版本页面里提供了预编译的二进制文件。如果您的操作系统或架构没有预编译的文件,请使用交叉编译自行构建,请参考此文档。
编译时,用户可通过 go build tags 选择需要编译的功能编译出自定义的仅包含所需功能的二进制包从而减少可执行文件的大小。在资源受限的环境中,包的大小尤其重要。进一步的信息,请参考功能。