白皮书
车联网设计与实现:搭建可靠、高效、符合行业需求的车联网平台 →

eKuiper Newsletter 202111:大量新功能和性能优化,v1.4.0 整装待发

eKuiper Team
2021-12-1
eKuiper Newsletter 202111:大量新功能和性能优化,v1.4.0 整装待发

LF Edge eKuiper(以下简称 eKuiper)是由 EMQ 发起的 Go 语言实现的轻量级物联网边缘分析、流式处理开源软件项目,现已捐赠给 LF Edge 基金会。eKuiper 可以运行在各类物联网的边缘使用场景中进行数据的实时分析。通过 eKuiper 在边缘端的处理,可以提升系统响应速度与安全性,节省网络带宽费用和存储成本。

本月,eKuiper 团队聚焦于 v1.4.0 版本的开发,力争在 12 月初正式发布该版本。v1.4.0 是 major 版本,添加了大量新功能,提升了运行性能和开发效率。目前的开发进展顺利,新功能已基本开发完成,接下来的几周将进行测试、UI 等收尾工作。

以下功能在上月底发布的 1.4.0-beta.1 中已经可以使用,欢迎大家使用并提出宝贵意见。

规则流水线:灵活构建复杂业务

eKuiper 使用 SQL 定义业务逻辑,降低了业务开发的门槛。在实际使用场景中,简单的 SQL 语句可以高效地定义过滤、聚合和数据转换等业务需求。然而对于一些较为复杂的场景,单条 SQL 语句难以定义;即使可以定义,SQL 语句自身也会显得过于复杂,后续难以维护。

规则流水线基于新增的内存 source 和 sink,可以简单高效且灵活地连接多条 SQL 规则,从而在实现复杂的业务场景的同时,保持 SQL 语句的可读性和可维护性。规则直接连接采用类似 MQTT 主题的机制,并支持通配符订阅,实现了异常灵活且高效的规则连接。在提高业务表达能力的同时,规则流水线也可提高某些复杂场景下的运行性能。例如,多个规则都需要处理经过某个条件过滤后的数据。通过把该过滤条件提取成前置规则,可以使过滤仅计算一次,规则多的情况下可大大减少计算量。

Portable 插件:让扩展更容易

eKuiper 在最初的版本中就支持了基于 Go 原生插件系统的扩展方案,支持对 source、sink 和 function (UDF) 进行个性化扩展。然而,由于 Go 语言插件系统自身的限制,插件的编写和使用对于熟悉 Go 语言的用户都不容易,遑论其他语言的使用者。eKuiper 社区中也收到了大量用户关于插件开发、 运行和部署等的反馈,各种运行问题不一而足。

为了平衡开发效率和运行效率,v1.4.0 版本将增加新的 Portable 插件系统,从而降低插件开发使用门槛。新的 Portable 插件基于nng协议进行进程间通信,支持多种语言,当前提供 go 和 python SDK,后续版本可根据用户需求增加更多语言 SDK;简化编译/部署流程,与运行各种语言编写的程序一样,而无需额外限制。由于运行机制不同,Portable 插件崩溃将不会影响 eKuiper 自身。

原有插件系统 Native 插件与 Portable 插件可以共存。用户可根据自身需求,选用插件实现方式或混合使用。

共享连接:同类 Source/Sink 复用连接

eKuiper 中提供了丰富的 source 和 sink 来接入和发送结果的到外部系统中。其中,很多 source 和 sink 都是同一种外部系统类型的输入输出对。例如,mqtt 和 edgeX 都有对应的 source 和 sink。新的版本中,用户可在 connection.yaml 文件中做所有连接相关配置;在 source/sink 的配置中,可以指定使用的连接而无需重复配置。共享连接实例,可减少多个连接的额外消耗。在部分场景中用户连接外部系统的数量和端口可能有限制,使用共享连接可满足此限制。同时,基于共享连接, eKuiper 可支持连接 edgeX 安全数据总线。

其他提升

  • 支持通过环境变量进行配置
  • eKuiper 默认采用嵌入式数据库 sqlite 存储流和规则等元数据,从而可实现运行时无外部依赖。在新版本中,用户可选择 redis 作为元数据存储方案
  • 规则状态返回错误原因
  • 优化 SQL 运行时

即将发布的功能

  • sink 动态参数支持,例如 mqtt sink 可设置主题为结果中的某个字段值,从而实现根据收到的数据发送到动态主题的功能
  • 认证支持:用户可配置 REST API 的基于 JWT 的认证
  • UI 适配

推荐阅读