0

Apache Storm 和 Samza 保证至少交付一次。这意味着计算过程中可能存在一些重复。我们是否需要自己移动重复项(包括删除代码中的重复部分)?例如,字数问题。如果单词“男孩”只出现一次,但由于某些故障或延迟而出现了 2 个“男孩”。风暴重播了“男孩”。那么'boy's count 2的结果是什么?或者Storm为我们删除重复,结果是一个?

4

1 回答 1

0

Storm 不会删除重复项,您必须检查是否已经在流的开头(即您的 spout)处理了根消息,这样您就不会在拓扑中再次发送它,然后弄乱您的计数器。

幂等消费者模式是你应该看的。存储获取的最后一个事件的哈希值,以便在意外再次发送它们时忽略它们是一种实现方法(例如,内存中的 ConcurrentHashMap 可以做到这一点,或者像 Redis 这样的外部缓存,不要忘记驱逐这些结构)确定您没有再次获得该事件的风险)。

于 2019-07-02T13:02:52.410 回答