Không có mô tả

dependabot[bot] a7e2d9f029 chore(deps): bump github.com/snowflakedb/gosnowflake in /extensions 1 năm trước cách đây
.github 6f60098f5f fix: add safe directory for build pkg (#1977) 1 năm trước cách đây
cmd c6ad75afac style: sort go imports (#1844) 1 năm trước cách đây
deploy 4215413911 ci(docker/debian): upgrade debian to bullseye (#1969) 1 năm trước cách đây
docs 6f22adf1f5 fix(doc): fix collect function example 1 năm trước cách đây
etc dfa9b5e16b feat: file soure support enable parallel (#1948) 1 năm trước cách đây
extensions a7e2d9f029 chore(deps): bump github.com/snowflakedb/gosnowflake in /extensions 1 năm trước cách đây
internal 74439586bc fix: fix updateTopo for schedule rule (#1982) 1 năm trước cách đây
pkg 6a30abee44 feat: support single quote string literal (#1974) 1 năm trước cách đây
plugins 9236c27c17 feat(portable): runtime support for portable plugins and go sdk 3 năm trước cách đây
sdk 69ba304f1b fix: pre-correct lint detected errors (#1955) 1 năm trước cách đây
test 59d9de2e22 refactor: remove deprecated properties (#1937) 1 năm trước cách đây
tools 920e0cc4e9 ci(lint): enable linter for multiple modules (#1957) 1 năm trước cách đây
.gitignore 920e0cc4e9 ci(lint): enable linter for multiple modules (#1957) 1 năm trước cách đây
.golangci.yaml 920e0cc4e9 ci(lint): enable linter for multiple modules (#1957) 1 năm trước cách đây
CONTRIBUTING.md cc4790001c refactor(doc): copy contributing to project root 1 năm trước cách đây
LICENSE 6823b05a14 Initial commit 5 năm trước cách đây
Makefile 920e0cc4e9 ci(lint): enable linter for multiple modules (#1957) 1 năm trước cách đây
README-CN.md b4b8bd9706 chore: fix readme typos 1 năm trước cách đây
README.md b4b8bd9706 chore: fix readme typos 1 năm trước cách đây
build-plugins.sh 6ca113cede chore: add zmq install script 2 năm trước cách đây
codecov.yaml 6219a8d72a test(pkg): add test cases (#1913) 1 năm trước cách đây
go.mod e13cd2a6fb feat: introduce fastjson in converter (#1954) 1 năm trước cách đây
go.sum e13cd2a6fb feat: introduce fastjson in converter (#1954) 1 năm trước cách đây
go.work 2dd81a286a build: add kubernetes tools to workspace 2 năm trước cách đây
go.work.sum 9cc3bce941 edgeX v3 mod update 1 năm trước cách đây

README-CN.md

LF Edge eKuiper - 超轻量物联网边缘数据分析软件

GitHub Release Docker Pulls codecov Go Report Card Slack Twitter 问答社区 YouTube

English | 简体中文

概览

LF Edge eKuiper 是一款可以运行在各类资源受限硬件上的轻量级物联网边缘分析、流式处理开源软件。eKuiper 的一个主要目标在边缘端提供一个实时流式计算框架(与 Apache Flink 类似)。eKuiper 的规则引擎允许用户使用基于 SQL 方式,或者 Graph 方式的规则,几分钟内快速创建边缘端的分析应用。

arch

应用场景

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 的函数调用)

  • 管理能力

  • 与 EMQX 产品集成

EMQX, NeuronNanoMQ 等产品无缝集成,为 IIoT 和 IoV 等提供端到端的解决方案

快速入门

社区

你可通过以下途径与 EMQ 社区及开发者联系:

欢迎你将任何 bug、问题和功能请求提交到 lf-edge/ekuiper

会议

欢迎订阅社区日历

欢迎参加社区周会,每周五早上 10:30(北京时间)举行。

贡献

感谢您的贡献!请参阅 CONTRIBUTING.md 获取详细信息。

性能测试结果

MQTT 吞吐量测试支持

  • 使用 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

EdgeX 吞吐量测试

  • 一个 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 选择需要编译的功能编译出自定义的仅包含所需功能的二进制包从而减少可执行文件的大小。在资源受限的环境中,包的大小尤其重要。进一步的信息,请参考功能

开源版权

Apache 2.0