【发布时间】:2015-02-23 21:55:15
【问题描述】:
据我了解,ZooKeeper 将持久化 bolt 发出的元组,因此如果一个 bolt 崩溃(或者一个带有 bolt 的计算机崩溃,或者整个集群崩溃),bolt 发出的 tuple 不会丢失。一旦一切重新启动,元组将从 ZooKeeper 中获取,一切都会继续进行,就好像没有发生任何不好的事情一样。
我还不明白喷口是否也是如此。如果一个 spout 发出一个元组(即,一个 spout 中的 emit() 函数被执行),并且 spout 正在运行的计算机在此后不久崩溃,该元组会被 ZooKeeper 复活吗?还是我们需要 Kafka 来保证这一点?
附:我知道在调用 emit() 时,必须为 spout 发出的元组分配一个唯一 ID。
附言我在书中看到示例代码使用ConcurrentHashMap<UUID, Values> 之类的东西来跟踪哪些喷出的元组尚未被确认。这是否以某种方式自动与 ZooKeeper 保持一致?如果不是,那我真的不应该那样做,不是吗?我应该做什么呢?使用卡夫卡?
【问题讨论】:
标签: apache-storm