【问题标题】:Is there any cap on number of tuples generated out of one tuple from a Apache Storm Bolt?从 Apache Storm Bolt 的一个元组生成的元组数量是否有上限?
【发布时间】:2019-08-15 22:03:29
【问题描述】:

我们的一个 Bolt 将一个大的元组消息分解为它的孩子,然后将这些孩子作为元组发出。有时可能有 10000 个孩子。

元组的这种轰炸,扼杀了我们的拓扑。

Bolt 中的一个元组生成的元组数量是否有上限/上限?

我们需要将这些子节点进一步发送到拓扑的下方,以便这些子节点的状态可以根据父节点的状态进行更新。

【问题讨论】:

    标签: apache-storm


    【解决方案1】:

    Storm 跟踪元组的算法有一个上限,但该上限是在您开始看到 64 位随机值之间的常见冲突的地方。所以不,实际上没有上限。

    您可能会遇到处理所有子元组的时间过长,因此整个元组树都会遇到元组超时。您可以增加超时时间,也可以绕道而行,例如Kafka,因此整个处理不必在单个元组树的处理时间内发生。

    类似的设置

    拓扑A:源->分离器->卡夫卡

    拓扑 B:Kafka -> 处理

    让您可以单独处理每个子节点,而不必在父节点的消息超时内处理所有 10k 元组。

    如果您的拓扑被阻塞,请详细说明您的意思。

    【讨论】:

    • 你没看错。这种设置有什么缺点:source -> Bolt1 -> Kafka -> Bolt2 在一个拓扑下?
    • 你的意思是 source -> bolt1 -> kafka -> kafka spout -> bolt2,或者你是如何从 kafka 读取到 bolt2 的?所以本质上只有一个拓扑结构,有两个 spout,一个从源读取,一个从 Kafka 读取?
    • 是的。甚至 kafka (source) -> spout -> Bolt1 (transformation) -> kafka -> Spout -> Bolt2 (进一步处理)。如果我们将所有内容都保持在单一拓扑中,那有什么坏处吗?
    • 不,我不这么认为。应该没问题。唯一的缺点是您不能单独部署这两个部分,但您可能无论如何都不需要这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多