【问题标题】:Exactly-once guarantee in Storm Trident in network partitioning and/or failure scenarios网络分区和/或故障场景中 Storm Trident 中的 Exactly-once 保证
【发布时间】:2017-06-21 12:40:13
【问题描述】:

因此,Apache Storm + Trident 提供了完全一次性的语义。假设我有以下拓扑:

TridentSpout -> SumMoneyBolt -> SaveMoneyBolt -> Persistent Storage.

CalculateMoneyBolt 对内存中的货币值求和,然后将结果传递给SaveMoneyBoltSaveMoneyBolt 应该将最终值保存到远程存储/数据库。

现在非常重要的是我们计算这些值并且只将一次存储到数据库中。我们不想不小心重复数钱。

那么当对数据库的写入请求已成功发送、数据库已成功接收请求、记录事务以及响应客户端时,Storm with Trident 如何处理网络分区和/或故障场景,@ 987654324@ 在收到数据库响应之前已经死亡或从网络中分区?

我假设如果 SaveMoneyBolt 已经死亡,Trident 会重试该批次,但我们不能承受重复计算。

如何处理此类场景?

谢谢。

【问题讨论】:

    标签: apache-storm reliability network-partitioning


    【解决方案1】:

    Trident 为每个批次提供一个唯一的交易 ID。如果重试批次,它将具有相同的 txid。批量更新也是有序的,即在前一个批次的更新完成之前,不会发生批次的状态更新。因此,通过将 txid 与状态 trident 中的值一起存储,可以对更新进行重复数据删除并提供恰好一次的语义。

    Trident 带有一些内置的 Map 状态实现,可以自动处理所有这些。

    有关更多信息,请查看文档:

    【讨论】:

      猜你喜欢
      • 2021-12-11
      • 2020-12-29
      • 2020-03-12
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多