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

流批结合计算以及更多原生分析能力支持

eKuiper Team
2022-11-8
流批结合计算以及更多原生分析能力支持

十月,eKuiper 正式发布了 1.7.0 版本。这一版本引入了查询表和可更新 Sink 的概念,支持数据流与外部存储的数据一起计算,进一步完善了流批结合的实时计算能力。与此同时,我们改进了分析函数,支持分流进行有状态计算,添加了更多的分析函数,继续提高规则的表达能力。在外部连接整合方面,我们丰富了source/sink,部分资源整合适配了新的查询表和可更新 Sink 的能力。另外,新版本也着力提高产品运维的能力,优化了管理控制台的外部资源 source/sink 的管理逻辑;提供了规则集的批量导入导出和初始化功能。

在之前的 Newsletter 中,我们已经对 v1.7.0 的部分功能进行了介绍,本文将重点介绍本月新添加的功能。欢迎大家下载试用,并提出您的宝贵反馈。

强化分析能力

新版本添加和改进了 SQL 语法和内置函数,支持更多原生的分析能力。

  • 添加了新的 Lookup Table 概念,用于绑定外部静态数据,可以在规则中与流数据进行连接,实现流批结合的运算。
  • 可更新的 Sink,除了原有的添加功能,支持通过规则对外部输出进行修改和删除。例如,可配置规则修改 SQL 数据库和 Redis 的数据。
  • 分析函数执行优化及分流计算。
  • 新增分析函数 Latest,可获取数据点位最新的值。用于采集数据点位不固定,可自动拼接计算完整数据。
  • SQL 支持选择 * 的同时,选择更多的函数计算、别名等。

分析函数分流计算

分析函数指的是通过保存状态进行状态相关分析的函数,使得用户可以无需通过复杂的时间窗口或者自定义函数完成一部分常用的有状态计算。eKuiper 原有版本中已经提供了诸如 lagchanged_colhad_changed 等分析函数。新的版本中,我们对分析函数进行了强化。

首先,分析函数在 SQL 逻辑计划中将被放置于数据源之后执行。运行时在流式处理规则中,分析函数需要在事件触发时进行状态更新。若在部分子句中,例如带 WHERE 过滤的规则中使用,有可能函数尚未执行规则已经返回。新的改动保证在事件触发时可及时进行状态更新。

其次,分析函数中添加了 Partition By 的分流语法。分析函数的计算默认是在数据流的所有输入事件上进行的。然而,有部分用户的数据流事实上包含了来自不同维度的数据,例如多个设备的数据混杂在一个 MQTT topic 中。新的语法允许用户在做分析计算时根据 Partition By 定义的维度进行分流计算。其语法如下所示:

textAnalyticFuncName(<arguments>...) OVER ([PARTITION BY <partition key>])

假设用户接入一个数据流,其中的事件为来自多个设备的温度数据。以下两个示例分别演示了有无分流的计算效果。

示例 1:获取之前温度值的函数

lag(temperature)

示例 2:获取相同设备之前温度值的函数

lag(temperature) OVER (PARTITION BY deviceId)

扩大连接生态

新版本在资源连接方面主要完成了两部分工作:一方面继续增加内置和扩展的 source/sink;另一方面,扩展现有 source/sink 功能,并适配 Lookup Table 和 Updatable Sink 的能力。

  • Httppush source,通过 HTTP 协议向 eKuiper 推送数据。
  • Influx V2 sink,支持写入到 InfluxDB 2.x 版本中。
  • Redis lookup source,支持使用 Redis 作为外部查询表。
  • EdgeX source 支持 application/cbor 格式,可处理 EdgeX camera 等接入的二进制数据。
  • Memory 和 SQL source 适配 Lookup Table
  • Memory、Redis 和 SQL sink 支持更新
  • Redis sink 移到内置 Sink 中,无需安装插件即可使用。

增强运维体验

新的版本重构了外部连接配置相关的 API 以实现在管理控制台上更易用的连接资源管理功能。另外一个较大的更新来自于流和规则的批量导入导出和初始化功能,方便用户进行规则的迁移。

统一资源管理

资源是数据集成的关键概念 。eKuiper 需要从源资源中接入数据然后从动作目标资源中导出处理的数据。

在管理控制台上,当创建多个规则时,以前只支持源部分的资源复用,而针对动作,即使不同规则的动作目标一致,也需要多次重复输入资源信息。本次更新后,管理控制台中突出了资源管理概念,支持在单独页面配置资源,可分别对源和目标动作连接资源单独配置,在配置好后一键测试连接可用性,并支持用户在创建规则时引用已创建好的连接资源,简化规则编写步骤。

统一的 source/sink 资源配置管理页面

统一的 source/sink 资源配置管理页面

资源配置界面可测试连接

资源配置界面可测试连接

批量流和规则管理

新版本中提供了 REST API 和 CLI 接口,用于导入导出当前 eKuiper 实例中的所有流,表和规则定义。这样可以快速地备份规则配置或者移植配置到新的 eKuiper 实例中。导入导出的规则集为文本的 JSON 格式,可读性较强,也可以手工编辑。

此外,导出的规则集文件可命名为 init.json放置于 data 目录中。eKuiper 首次运行时将自动载入此初始规则集,从而可实现预置规则,提高分发效率。

服务管理界面增加导入导出规则集功能

服务管理界面增加导入导出规则集功能

即将到来

下个月我们将进行 1.7.1 版本开发,主要包括 EdgeX Levski 版本的适配和 Bug 解决。此外,我们也将启动 v1.8.0 以及 Flow Editor 的开发。

推荐阅读