六月的盛夏时节正是 eKuiper 项目捐献给 LF Edge 基金会一周年之时。六月初,项目圆满完成了在基金会的第一次年度 review,并确立了下一年度升级到 Stage 2 的目标。在此我们衷心感谢各位社区贡献者、合作伙伴和用户,期待新的一年能有更多伙伴加入到社区的建设中。
我们的开发工作也取得了不错的进展。月初,小版本 1.5.1 发布,主要解决了一些用户问题。在 1.6.0 版本开发方面,我们完成了离线缓存和重发机制的升级,更适应边缘部署中常见的边云网络连接易丢失的弱网场景。与此同时,我们补齐了一些 SQL 语法支持,包括 IN/NOT IN 表达式的支持、ORDER BY 对表达式和别名的支持等,方便用户编写更复杂的过滤和排序逻辑。最后,可视化拖拽能力的开发目前已完成后台 API 的部分验证。
大数据时代,云边协同是主流的计算模式。边缘计算的一部分结果需要发送到云端进行进一步的整合。然而边云之间的网络连接常常是不稳定的,网络连接故障时有发生。作为边缘流式计算引擎,eKuiper 经常有规则将计算结果汇入外部系统,尤其是远程的外部系统中。这种情况下,我们需要考虑弱网环境的处理:在网络断开等故障期间,必须对数据进行缓存,并在重新连接后重新发送。
此前,eKuiper 在一定程度上支持 sink 缓存。它提供了一个全局配置来切换缓存开启;系统/规则级配置用于内存缓存的序列化时间间隔。然而,缓存只是在内存中和复制到 DB(内存的镜像)中,并且没有定义明确的重发策略。六月,我们对缓存机制进行了优化,缓存将同时保存在内存和磁盘中,这样缓存的容量就变得更大了;它还将持续检测故障恢复状态,并在不重新启动规则的情况下实现自动重新发送。
缓存只发生在 sink 中,因为那是 eKuiper 之外唯一可以发送数据的地方。每个 sink 都可以配置自己的缓存机制。每个 sink 的缓存流程是相同的。如果启用了缓存,所有 sink 的事件都会经过两个阶段:首先是将所有内容保存到缓存中;然后在收到 ack 后删除缓存。
sink 缓存的配置有两个层次。etc/kuiper.yaml
中的全局配置,定义所有规则的默认行为。还有一个规则 sink 层的定义,用来覆盖默认行为。
etc/kuiper.yaml
中定义的元数据存储的配置。目前,该功能的代码已经合并到 1.6.0 版本的分支(https://github.com/lf-edge/ekuiper/tree/1.6.0)中。感兴趣的朋友可以自行编译使用。
在规则引擎中,我们经常需要判断某个值是否在一个列表中,从而触发相应的动作。在标准 SQL 语法中,通常使用 IN/NOT IN 表达式进行这样的过滤。本月,我们实现了 IN 运算符的支持。使用方法支持以下两种:
// expression [NOT] IN (expression2,...n)
// expression [NOT] IN arrayExpression
月初发布的 1.5.1 版本主要解决问题和小功能更新。主要的功能更新包括:
解决的 bug 包括:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。