我可以即时更改 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();
}
我正在使用 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();
}