当前位置: 首页 > 知识库问答 >
问题:

有什么方法可以在Storm bolts的一部分中访问元组吗

翟昊明
2023-03-14
// TimingBolt
@Override
public void execute(Tuple input) {
    if (TupleUtils.isTick(input)) {
        collector.emit(streamA, input, new Values("Tick"));
    } else {
        collector.emit(streamB, new Values("Message"));
    }
}
// The AggregateBolt after TimingBolt
@Override
public void execute(Tuple input) {
    if (input.getString(0).equals("Tick")) {
        collector.emit(new Values("Get Tick"));
        collector.ack();
    } else {
        // do something else
        collector.emit(new Values("Not Tick"));
    }
}

我希望除了TimingBoltAggregateBolt之外的螺栓可能超出ACK树的范围。

文档http://storm.apache.org/documentation/probureing-message-processing.html没有显示任何关于此问题的内容。这是一个有效的场景,还是从喷口启动ack是使ack工作的唯一方法?

共有1个答案

陶文林
2023-03-14

你得从壶嘴开始。

明确地说,您不能保证使用所谓的“可靠拓扑”传递消息。相反,您可以保证一个元组和它的所有“子代元组”都被完全交付和处理,或者将通知喷口失败。失败的消息可以自动重新发出,但最终会有一个不再重试元组的小窗口。为了使其发挥作用,spout具有一些bolt所不具备的可靠的元组行为:(1)使用元组发出对象id的能力和(2)当元组最终成功或失败时使用该id调用的方法(分别为ack(id)和fail(id))。由于bolt没有这些行为,因此不能从bolt启动可靠的元组处理。

考虑使用topology_tick_tuple_freq_secs直接配置第二个螺栓。

 类似资料:
  • 问题内容: 我知道这不是一种能够在React组件中执行类似操作的功能方法,而且我似乎无法在React组件实例上找到任何导致父级的属性,但是我只是希望能够在需要的地方做一些自定义的事情。 在任何人浪费时间解释这不是功能性的React“方法”之前,请理解我需要这样做,因为我正在尝试实现以下目标: 为Meteor的Spacebars模板引擎构建一个Transpiler,该引擎的渲染模型确实考虑了父组件/

  • 材料设计非常强调“纸张”的隐喻。要做到这一点,阴影是必不可少的。由于材料设计是一种理念,而不是API(尽管它内置在L中),因此应该在任何地方(Windows窗体、HTML/CSS等)进行设计。如何在Android API 14到20中做到这一点? 请注意,对于圆形和其他非方形形状,预制PNG实际上并不实用。

  • 问题内容: 我在一个包含私有字段的包中有一个结构: 另一个软件包(例如,白盒测试软件包)需要访问它们: 是否有一种方法可以声明是某种“朋友”软件包,或者可以通过其他任何方式访问的私有成员,但仍然对所有其他软件包保持私有(也许在其中)? 问题答案: 有 是 一种方法来 读取 使用反映不导出成员 但是,尝试使用y.Set或通过其他方式设置反射字段将导致代码恐慌,您试图在软件包外部设置未导出的字段。 简

  • 问题内容: 这样的事情会使小部件正常显示: 虽然这样,将使小部件完全不显示: 问题答案: 您可能对 小部件的和方法感兴趣。在以下示例中,单击后按钮消失

  • 问题内容: 我很好奇如何快速进行元组的for循环。 我知道要访问每个成员,您可以使用带点号的索引号 //错误:类型不符合协议顺序 问题答案: 是的你可以! 瞧! 注意最后一个是不是一个元组这样什么也不会发生(尽管它是一个内容可以被访问1元组或“单” ,为0)。 有趣的是,它甚至可以迭代其他类型的集合。 并且该集合包括和! 注意:作为块的第二个参数传递的值是type 。您必须将其强制转换回原始类型的

  • 问题内容: 大家好!我有一个简单的问题。…为什么我可以从main方法中获得一个私有变量?我知道,我在包含类中,但这是主要的。我相信主体不是包含它的类的一部分……那么我不会去找私人成员,但是我可以……为什么?请帮助… thx 问题答案: Main是您的类的一部分,您已经在类中声明了它:) main不是您的对象的一部分,它不会是您从该类创建的对象的任何部分,但它仍然是该类的一部分。这对于任何静态函数都