因此,Apache Storm + Trident 提供了exactly-once 语义。想象一下,我有以下拓扑:
TridentSpout -> SumMoneyBolt -> SaveMoneyBolt -> Persistent Storage.
CalculateMoneyBolt
对内存中的货币值求和,然后将结果传递给SaveMoneyBolt
应该将最终值保存到远程存储/数据库的结果。
现在非常重要的是我们计算这些值并且只将一次存储到数据库中。我们不想不小心重复数钱。
那么当对数据库的写入请求已成功发送、数据库已成功接收请求、记录事务以及在响应客户端时,Storm with Trident 如何处理网络分区和/或故障SaveMoneyBolt
场景在收到数据库响应之前从网络分区?
我假设如果SaveMoneyBolt
死了,Trident 会重试该批次,但我们不能承受重复计算。
如何处理此类场景?
谢谢。