distributed-computing - Storm bolt 的状态保存,它进行定期聚合并将聚合结果保存到数据库

标签 distributed-computing apache-zookeeper distributed-transactions apache-storm

我在网上看到了几个简单的聚合示例。但找不到能回答我问题的人。 我想知道 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 -

  1. https://github.com/nathanmarz/storm/wiki/Trident-state

  2. https://github.com/nathanmarz/storm/wiki/Transactional-topologies

您将获得有关如何设计拓扑的一些见解。

关于distributed-computing - Storm bolt 的状态保存,它进行定期聚合并将聚合结果保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20550356/

相关文章:

java - 尝试在 yahoo streaming-benchmark 上运行 STORM_TEST 时出错

asp.net - 每个请求 asp.net 单线程

web-services - 如何实现网络场景下的交易?

java - 读取大文件并写入 RDBMS

real-time - 在 Apache Storm 中的多个拓扑之间共享数据

java - 如何为具有动态大小的 ZooKeeper 集群初始化 CuratorFramework?

hadoop - 为什么在 MapReduce 中只有 map 和 reduce 函数

unix - 如何使用单个命令在 Apache Kafka 中创建主题列表

java - 如何在java中实现一个简单的心跳传感器,当另一个应用程序关闭时做出响应

bash - Slurm:提交到多个节点时出错 ("slurmstepd: error: execve(): python: No such file or directory")