我可以动态更改Esper螺栓声明吗?

时间:2015-01-21 13:13:58

标签: apache-storm esper topology

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

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

是否有可能看到检查我的xml的线程的场景以及何时找到定义的新语句可以在群集进行时使用新语句更新Esper Bolt?

我按如下方式定义了一个Esper螺栓:

    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();

在一个帖子中,如何访问此bolt并编辑/添加/删除其语句? 通过拓扑?怎么样?

2 个答案:

答案 0 :(得分:2)

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

希望这有帮助。


添加代码可能很有用

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

答案 1 :(得分:1)

我对Esper很熟悉,并且在动态添加或删除语句时看不到任何问题。而且我认为Storm不会阻止你这样做。