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

eKuiper Newsletter 2022-01 | 性能和文档优化、下一里程碑版本启动

eKuiper Team
2022-1-27
eKuiper Newsletter 2022-01 | 性能和文档优化、下一里程碑版本启动

上个月 eKuiper 正式发布了里程碑版本 1.4.0,不少朋友已经开始尝鲜使用。特别是一些补齐短板的新功能,例如 python 插件、规则流水线、动态参数等,都得到了来自用户社区的好评。

本月,我们陆续发布了两个小版本,持续修复用户反馈的问题,提高产品稳定性和用户体验。同时,在万象更新的新年第一个月,eKuiper 团队也启动了下一个里程碑版本 v1.5.0 的开发,完成了一些功能并合并到开发库中,方便需要的社区伙伴尝鲜。

持续提升, v1.4.1 和 v1.4.2 接踵而至

本月发布的 v1.4.1 和 v1.4.2 版本都致力于提升产品的稳定性,优化产品的性能和文档。建议用户直接升级到 v1.4.2 版本,以便获得更好的体验。这两个版本中主要的改进如下:

Portable 插件支持的优化

使用 Python 插件的目标系统需要安装 python 3.x 环境以及依赖的 eKuiper 插件运行时。在采用容器部署的情况下,用户需要自行在官方 Docker 镜像中安装配置环境,多有不便。新的版本中,官方提供了带有 eKuiper 和插件 python 环境的镜像,使用 python 插件的用户可以开箱即用,请使用带 -slim-python 后缀的镜像,例如 lfedge/ekuiper:1.4.2-slim-python。同时,在 dockerhub 中,我们提供了大版本号的tag,会自动获取该大版本下最新小版本的镜像。例如,lfedge/ekuiper:1.4-alpine 会自动指向最新的 1.4.x 版本的镜像。当前,它会指向最新的 1.4.2 版本的镜像。

在插件运行时方面,我们也解决了一些稳定性问题和性能问题,并更新了部分插件示例。其中,插件 SDK 在运行自定义函数(source 和 sink 不会)时,会发生与主程序连接乱序问题。用户需要更新对应的插件 SDK 版本来解决这个问题。另外,新的函数插件运行时缓存了 isAggregate 函数的结果,避免每次运行都需要查询的情况,以提高性能。

Sink 动态参数的修改

原先动态参数中支持以 $ 符号开头的 JSONPath 语法。然而,部分用户的 MQTT Topic 本身是以 $ 开头的,从而发生冲突,导致该类型的 Topic 无法正常工作。在 Sink 中,原本就有数据模板的语法用于输出结果的格式化,其功能强大灵活并得到了广泛的应用。新版本中,动态参数采用了数据模板完全相同的语法,使得用户可以更加灵活地输出结果同时无需再学习新的语法。对于文本格式化,数据模板将比 JSONPath 语法更加灵活,支持更多的格式化功能。在下例中,规则将结果发送到了动态的 MQTT Topic中,得益于数据模板的语法,Topic 的格式可以非常容易地添加上前缀或者后缀或者更加复杂的格式化。

{
  "id": "rule1",
  "sql": "SELECT topic FROM demo",
  "actions": [{
    "mqtt": {
      "sendSingle": true,
      "topic": "prefix/{{.topic}}"
    }
  }]
}

原先在 MQTT Sink 中使用 JSONPath 语法的用户,建议修改成新的格式。若仍需使用旧的语法,可以将前缀改成 ($ 以区分普通的 MQTT Topic。

EdgeX Object 类型的支持

在 EdgeX Foundry Jarkata 版本中添加了一种新的数据类型 Object,可以用来存储复杂结构的数据,例如 map。在新的版本中,eKuiper 的 EdgeX source 和 Sink 都适配了这种类型,无需额外配置即可正常解析。读入 eKuiper 的 EdgeX object 类型的 reading,可以直接使用 eKuiper 的 json 语法进行读取、操作、转换等。例如,读取 Resource 名为 obj,其Object 值为{"a":"string","b",1},在 eKuiper SQL 中,可以通过 obj->a 访问到嵌套的值。同时,eKuiepr 输出结果中的 map 类型,发送到 EdgeX 中会自动设置为 object 类型。

其他改进

  • UI 适配完善:解决了多个 UI 问题,例如共享连接配置,插件安装页面报错,中文名规则无法显示等。
  • 运行时性能优化,在共享源多规则的测试用例中,在上一个版本的基础上又降低了 20% 的 CPU 使用率。
  • HTTP source 和 Sink 支持配置 https 证书。
  • 其他 Bug 修复,请参见 1.4.11.4.2 release notes。

启动 1.5.0 开发

下一个里程碑版本 v1.5.0 已经进入开发阶段。目前完成的主要功能是按需编译的能力。

按需编译

作为边缘流式处理引擎,需要部署的异构目标系统很多,既有算力较好的边缘端的机房、网关等,也有出于成本以及业务的特殊要求考虑而采用成本更便宜或是定制化的软硬件方案。随着功能的逐渐增强,全功能的 eKuiper 在极端资源受限的设备上,例如内存少于50MB的终端上,可能会稍显臃肿。新的版本中,我们将 eKuiper 的核心功能和其他功能通过 go 语言的编译标签进行剥离。用户在使用的时候,可以通过设置编译参数的方式,按需编译部分功能,从而得到更小的运行文件。例如,仅编译核心功能,可使用 make build_core 得到一个只包含核心功能的运行文件。进一步信息,请参考 按需编译

文档更新

根据用户反馈,新的一年里我们将持续完善文档,添加更多的示例和案例。本月,我们对文档的结构进行了调整,将文档的主目录树精简为安装、使用指南、规则、SQL 和扩展这几个部分,方便用户查找所需的信息。大家可以点击 eKuiper 文档查看并提交反馈。

推荐阅读