【问题标题】:Do we need to remove duplicate by ourselves on at least once delivery case?我们是否需要至少在一次交付情况下自行删除重复项?
【发布时间】:2019-11-04 14:11:32
【问题描述】:

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

【问题讨论】:

标签: apache apache-storm trident apache-samza


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多