Apache Storm:记住 spout 的旧输出字段数

Apache Storm: Remembering old number of output fields for spout

将 spouts 声明从单个字段输出更改为两个后,集群似乎记得其旧的输出声明。例如

declarer.declare(new Fields("userTask"));

declarer.declare(new Fields("tupleTrackingId","userTask"));

本篇文章已连载。这也被记住了。

日志中的错误状态

Tuple created with wrong number of fields. Expected 1 fields but got 2 fields

但现在有了新的声明。

问题 有没有办法清除风暴集群的历史记录?或者清除历史生成的序列化对象?

或者如果这是另一个问题?

为了理智,这里是 spout 输出。

outputCollector.emit(new Values(msgID, task), msgID);

谢谢

Nimbus 缓冲区在 storm.local.dir 中提交了拓扑。您应该能够删除那里的缓冲拓扑(即 jar 文件)。 但要小心:删除"wrong"个文件会中断运行个拓扑!

这个问题是因为我在 storm 目录中有一个相同程序的原始编译 jar,来自之前在测试集群设置时的构建和部署。

当启动 Nimbus 时,此文件中的任何 jar 都被包含在内,因此引用了这个旧 jar,搞乱了已更改对象的序列化。您可以通过查看启动 Nimbus 时传递的参数来查看。

注意事项 不要将罐子放在 Storm 文件夹中,因为这可能会导致难以追踪的问题。