风暴螺栓的状态保存,定期聚合并将聚集结果保存到数据库

yvgpqqbh  于 2021-06-24  发布在  Storm
关注(0)|答案(1)|浏览(282)

我在网上看到了几个简单的聚合示例。但找不到能回答我问题的答案。我想知道zookeeper是否保存了螺栓的状态,所以如果一个聚合螺栓崩溃,那么当它重新启动worker时,worker将从以前的状态开始。我使用ack(也可以进行批处理)
例如,假设我每分钟都要计算找到多少相同类型的单词并将它们存储在数据库中。我的bolt会为每个工作保留计数器,并在每分钟结束时将内存中的计数器转储到db。
输入:花生很棒。大海很美。
处理输入后的螺栓状态:
the:2
peanut:1
是:2
great:2
ocean:1
(我希望我不需要三叉戟)
所以,如果bolt在提交到db计数器之前崩溃,zookeeper是否保存该状态?
如果没有,那么你有什么建议/链接,最好的方法是什么?
谢谢

cfh9epnr

cfh9epnr1#

zookeeper用于协调集群中的节点。我不认为它是用来保存螺栓的内部状态。不幸的是,我找不到明确提到它的链接
此外,在设计这种“聚合器”拓扑时,还应该注意常见的问题。假设bolt a处理单词“the”,b处理单词“ocean”。假设你的喷口在发出“海洋是伟大的”之后就崩溃了。螺栓“a”会收到单词“the”并将其递增,而“b”从未收到任何输入。
现在,当喷口回来,它发出“海洋是伟大的”再次,螺栓a不应过度计算“的”。这个逻辑必须由应用程序开发人员处理。
trident使用事务ID处理这些情况。值得一看。
请看一下这些维基-
https://github.com/nathanmarz/storm/wiki/trident-state
https://github.com/nathanmarz/storm/wiki/transactional-topologies
您将了解如何设计拓扑。

相关问题