4

I'm new to Siddhi, and I got several questions:

  1. Is SiddhiManager thread safe? Is it a good practice one shared instance per JVM?
  2. How to define stream and add query at runtime? It seems it only has siddhiManager.createExecutionPlanRuntime(plan) which will create a new ExecutionPlanRuntime instance. And how to redefine stream and query?

  3. What's inEvents and removeEvents in QueryCallback?

    
     executionPlanRuntime.addCallback("query1", new QueryCallback() {
            @Override
            public void receive(long timeStamp, Event[] inEvents, Event[] removeEvents) {
                EventPrinter.print(timeStamp, inEvents, removeEvents);
            }
        });
     
  4. How would Siddhi scale, if I have lots of stream and queries?

Thanks!

4

1 回答 1

4
  1. 是的。SiddhiManager 是线程安全的,每个 JVM 有一个共享实例是一种很好的做法。事实上,这就是 Siddhi Manager 在 WSO2 CEP 中的使用方式。
  2. 在 Siddhi 流定义 + 查询组合被视为执行计划。除了使用 createExecutionPlan 方法重新部署之外,没有专门的方法可以在 Siddhi 级别编辑执行计划。请注意,您将由此获得一个新的 ExecutionPlanRuntime 对象。因此不能重用旧的输入处理程序引用。
  3. inEvents 数组表示 Siddhi 发出的当前事件, removeEvents 表示 Siddhi 发出的过期事件
  4. 如果您在单个执行计划中有大量查询,Siddhi 将可以很好地扩展。但是,当使用多个执行计划向外扩展时,Siddhi 将很快达到资源阈值,因为每个执行计划的资源利用率并不高,这将导致性能下降。最近我们进行了改进以解决此限制,如 this[1] 邮件中所述。master 分支中提供了改进。

[1] http://wso2-oxygen-tank.10903.n7.nabble.com/Siddhi-Making-Disruptor-configurable-td136499.html

于 2016-05-23T10:24:06.070 回答