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

eKuiper Newsletter 2022-03|规则运行重构、新方法实现列的分组

eKuiper Team
2022-4-2
eKuiper Newsletter 2022-03|规则运行重构、新方法实现列的分组

本月初,eKuiper 团队发布了 v1.4.3,主要包含共用连接功能重构以及其他 Bug 修复。由于预编译 TDengine 插件崩溃问题在打包发布后的版本仍然存在,我们计划在下一个版本 v1.4.4 中进行修复,同时解决本月用户发现的其他问题。此外,v1.5.0 的新功能开发仍然在有条不紊地进行中,预计于 4 月份发布。

本月重要新功能速览

规则隔离

新的版本中,我们对规则运行和生命周期进行了优化和重构,增加了规则运行的稳定性,提高规则之间的隔离性。主要表现在以下几个方面:

  • 规则错误隔离:即使是使用共享源的规则,某个规则的运行时错误也不会影响另外的相关规则。同时,新版本的规则系统级的 panic 错误也会在规则级别进行处理,不再导致整个 eKuiper 进程崩溃。
  • 规则负载隔离:使用共享源或者内存源的兄弟规则之间,在保持消息顺序的同时,消息流入吞吐量不受其他规则的影响。

对选择的列进行分组

规则的 SQL 语句中select选择出的所有列会组成一个对象,供 sink 插件和下游的应用进行处理。在有些场景中,下游应用需要对选择的列进行分组,然后灵活地对每个分组进行处理。例如,把选择出来的结果分成多个 key/value 集合,其中 key 为文件名,这样可以动态地把结果写入到多个文件中。

新的内置方法 object_construct 可以轻松实现列的分组和命名。其语法为 object_construct(key1, col, ...),可支持多个参数,并返回由参数构建的对象 。参数为一系列的键值对,因此必须为偶数个。键必须为 string 类型,值可以为任意类型。例如,用户需要把列 1,2,3 写入到文件 1;而列 4,5 写入到文件 2 中。则可使用一条 SQL 规则对列进行分组,并对组名进行赋值:

SELECT object_construct("key1", col1, "key2", col2, "key3", col3) AS file1, object_construct("key4", col4, "key5", col5) AS file2 FROM demoStream

其输出结果形如下列 JSON 对象:

{
  "file1":{"key1":"aValue","key2":23,"key3":2.5},
  "file2":{"key4":"bValue","key5":90}
}

其他动态

Bug 修复

本月修复的 Bug 会同时进入 1.4.4 和 1.5.0 版本中。影响较大的 Bug 包括:

  • 预编译的 TDengine 插件在 Docker slim 版本中崩溃的问题。
  • Portable 插件运行时交互 timeout 容错处理
  • 重启 QoS 1 或 2 的规则时,sink cache 清理问题

1.5.0 版本

目前我们正在针对 1.5.0 版本进行其与 Neuron 2.0 的整合,预计下个月将为大家带来正式的功能介绍。

社区动态

eKuiper 的社区网站正在开发中,正式上线后大家可以在 eKuiper 社区站一站浏览 eKuiper 相关的博客文章、版本信息等内容。敬请期待。

推荐阅读