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

标签 java apache-storm trident

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

但是,我很难找到让我的 spout/函数知道事务是否成功提交的方法。我没有看到任何像常规 Storm spout/bolt 接口(interface)中那样的 ack 或 failed 方法。

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

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

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

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

谢谢

最佳答案

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

关于java - 如何在 Apache Storm Trident 中确定事务是否成功提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29122770/

相关文章:

java - 如何将关系输入二维数组?

distributed-computing - Storm bolt 的状态保存,它进行定期聚合并将聚合结果保存到数据库

java - 在 Storm TrackedTopology 单元测试中运行 Trident 拓扑

c++ - 在基于 Trident 的应用程序中调试 JavaScript

kubernetes - Prometheus 和 nfs 存储

java - 从字符串数组中获取整数列表

java - 将可选成员变量标记为 NonNull

java - 内存不足异常,处理位图时

apache-storm - Apache Strom从1.0.3升级到2.2.0,并非所有worker都被使用

java - Storm 攻击和失败