我在网上看到了几个简单的聚合示例。但找不到能回答我问题的人。 我想知道 Zookeeper 是否保存 Bolt 的状态,因此如果 1 个聚合 Bolt 崩溃,那么当它重新启动工作程序时,工作程序将从之前的状态开始。我使用 ack(也可能进行批处理。)
例如,假设我必须每分钟计算找到多少相同类型的单词并将它们存储在数据库中。 我的 Bolt 将为每项工作保留计数器,并在每分钟结束时将其在内存中保存的计数器转储到数据库。
例如: 输入:花生很棒。大海真伟大。输入处理后的 Bolt 状态:
:2
花生:1个
是:2
伟大:2
海洋:1
(我希望我不需要三叉戟。)
因此,如果 Bolt 在提交到 db 计数器之前崩溃,Zookeeper 会保存该状态吗?
如果没有,那么您是否有关于最佳方法的建议/链接?
谢谢
最佳答案
Zookeeper用于协调集群中的节点。我不认为它是用来保存 bolt 的内部状态的。不幸的是我找不到明确提到的链接
此外,在设计此类“聚合器”拓扑时,您还应该注意常见问题。 假设 bolt A 正在处理单词“The”,而 B 正在处理单词 ocean。假设你的喷口在发出“海洋很棒”之后就崩溃了。 Bolt 'A' 会收到单词“The”并递增它,而 'B' 从未收到任何输入。
现在,当喷嘴返回并再次发送“海洋很棒”时, bolt A 不应过度计算“The”一词。该逻辑必须由应用程序开发人员处理。
Trident 使用事务 ID 处理这些情况。值得一看。
请查看这些 wiki -
您将获得有关如何设计拓扑的一些见解。
关于distributed-computing - Storm bolt 的状态保存,它进行定期聚合并将聚合结果保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20550356/