如何确定Apache Storm Trident中是否成功提交了事务

时间:2015-03-18 12:59:33

标签: java apache-storm trident

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

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

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

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

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

或者我应该为每个类别设置一个鲸鱼喷水,并将max_spout_pending设置为1?

由于

1 个答案:

答案 0 :(得分:0)

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