1

我正在尝试开始使用 Storm Trident 并设置拓扑并使用IOpaquePartitionedTridentSpout运行并由OpaqueMap支持。

但是,我很难找到让我的 spout/function 知道事务是否成功提交的方法。我没有在常规 Storm spout/bolt 接口中看到任何 ack 或 fail 方法。

我的用例是仅在同一类别的前一个被处理和持久化(或失败)时才发出一个类别的元组。因为然后我将使用处理后的数据来更新我的下一个类别的元组。来自不同类别的元组可以并行处理。

流按类别使用partitionBy方法进行分区。

设置max_spout_pending为 1 可以消除问题,因为 Trident 一次只提交 1 个批次。但这不是可扩展的。设置为大于 1 的任何值都会使相同类别的元组(如果它们在两个连续批次中发出)在前一个事务提交之前被处理。

或者我应该为每个类别设置一个喷嘴并将其设置max_spout_pending为 1?

谢谢

4

1 回答 1

0

我建议您考虑实施ITridentSpout。它在协调器中有一个success() 方法,当批处理成功时调用该方法。来自协调器的相同元数据被发送到所有发射器,因此他们需要划分工作。

于 2015-04-18T21:23:17.623 回答