Ekuiper规则执行的原理

1、Ekuiper 运行一个规则,如果类比Java,对应的是启动一个线程处理吗?
2、Ekuiper规则之间的运行,是否相互独立?假设定义了几百个相同的Ekuiper规则:消费同一个数据源数据,相同的数据处理规则,可能输出的路径不一致。这些规则的处理,会不会进行合并,统一处理,或者还是并行地重复执行几百个规则。以MQTT数据源为例,几百个规则,是否启动几百个线程( MQTT客户端?) , 同时从MQTT数据源拉取消息?

  1. 是go的协程,每个规则经过 SQL 解析后会生成执行计划,根据复杂度生成数量不等的协程并发运行。
  2. 规则之间互相独立。默认的数据源是逻辑概念,规则运行时生成独立的数据源协程。数据源本身可以配置是否共享,使用共享数据源的规则共用一个数据源 instance: 流 | eKuiper 文档

谢谢。我还有两个相关规则执行的疑问:
1、如果是同一个MQTT共享数据源,在底层实现上,是启动一个MQTT客户端,去订阅相应TOPIC,去获取数据吧?然后,再分发到各个规则去执行?
2、如果指定了多个规则,每个规则的actions,均指定向同一个MQTT Broker去发布消息。底层实现上,每个规则,均启动一个MQTT客户端去发布消息?

  1. 是。MQTT sink 也支持共享连接,可以共用一个 client 数据连接 | eKuiper 文档