ApacheStorm和samza保证至少交付一次。这意味着在计算过程中可能会有一些重复。我们是否需要自己移动副本(包括删除代码中的重复部分)?例如,字数问题。如果单词“boy”只出现一次,但由于某些失败或延迟,有两个“boy”。风暴重播了《男孩》。那么“男孩数二”的结果呢?或者风暴为我们移除复制品,结果是一个?
oknwwptz1#
storm不会删除重复项,您必须检查您是否已经在流的开始(即您的喷口)处理了根消息,这样您就不会在拓扑中再次发送它,然后弄乱计数器。幂等消费模式是你应该看到的。存储上次获取的事件的哈希值,以便在它们再次意外发送时可以忽略它们,是实现这一点的一种方法(例如,内存中的concurrenthashmap可以做到这一点,或者像redis这样的外部缓存可以做到这一点,一旦确定没有再次获取事件的风险,不要忘记逐出这些结构)。
1条答案
按热度按时间oknwwptz1#
storm不会删除重复项,您必须检查您是否已经在流的开始(即您的喷口)处理了根消息,这样您就不会在拓扑中再次发送它,然后弄乱计数器。
幂等消费模式是你应该看到的。存储上次获取的事件的哈希值,以便在它们再次意外发送时可以忽略它们,是实现这一点的一种方法(例如,内存中的concurrenthashmap可以做到这一点,或者像redis这样的外部缓存可以做到这一点,一旦确定没有再次获取事件的风险,不要忘记逐出这些结构)。