我可以即时更改 Esper 螺栓语句吗?

Can I change an Esper bolt statement on the fly?

我正在使用 storm 处理一些数据流。

一开始我读了一个 xml 文件,我在其中找到了 Esper 螺栓中使用的语句。在我定义我的拓扑结构并将其 运行 放在集群上后不久。 现在,如果我想更改 bolt 中的语句,我必须修改 xml,停止集群,然后从头重新启动它。

是否有可能看到一个线程检查我的 xml 并且当发现定义的新语句时可以在集群运行时用新语句更新 Esper Bolt?

我定义了一个Esper bolt如下:

    String statement = "select count(*) as userPerMinutes from event.win:time_batch(60 sec)";
    EsperBolt esperBolt = new EsperBolt.Builder()
        .inputs().aliasComponent("user")
        .withField("field1").ofType(String.class)
        .withField("field2").ofType(Integer.class)
        .withField("field3").ofType(Long.class)
        .toEventType("event")
        .outputs().onDefaultStream().emit("userPerMinutes")
        .statements().add(statement)
        .build();

在线程中我如何访问这个螺栓和 edit/add/remove 它的声明? 通过拓扑?又如何?

我熟悉 Esper,在动态添加或删除语句时没有发现任何问题。而且我认为 Storm 不会阻止您这样做。

我有一个类似的系统。使用storm + esper 运行 一个分布式事件处理系统。 Esper 可以在 运行 时间删除和添加 epl。我的系统是如何做到的,在 bolt 中启动一个新线程以不时从数据库同步 epl。更新更改的一个(删除然后添加)。

希望对您有所帮助。


添加代码可能会有用

EPStatement statement = esperAdmin.getStatement(rule.getName());
if (statement != null) {
    statement.destroy();
}