我正在尝试开始使用Storm Trident,并在OpaqueMap的支持下设置和运行IOpaquePartitionedTridentSpout的拓扑结构。
然而,我很难找到让我的spout/函数知道事务是否成功提交的方法。我没有看到任何像在Storm spout/bolt接口中那样的确认或失败方法。
我的用例是,只有在处理和持久化(或失败)相同类别的前一个类别时,才发出该类别的元组。因为我将使用处理后的数据来更新类别的下一个元组。来自不同类别的元组可以并行处理。
使用partitionBy方法对流进行分类划分。
将max_spout_pending设置为1可消除该问题,因为三叉树一次仅提交一批。但这是不可伸缩的。如果设置为大于1的任何值,则同一类别的元组在两个连续批处理中发出时,将在前一个事务提交之前处理。
或者我应该为每个类别设置一个spout,并将max_spout_pending设置为1?
谢谢
发布于 2015-04-19 05:23:18
我建议你考虑实现一个ITridentSpout。它在协调器中有一个success()方法,当成功处理批处理时将调用该方法。来自协调器的相同元数据被发送到所有发射器,因此它们需要划分工作。
https://stackoverflow.com/questions/29122770
复制相似问题