【问题标题】:Creating threads in Storm Bolt在 Storm Bolt 中创建线程
【发布时间】:2015-07-23 12:18:12
【问题描述】:

我想并行触发多个 Web 请求,然后在风暴拓扑中聚合数据?以下哪种方式是首选

1) 在一个螺栓内创建多个线程

2) 创建多个bolt并创建一个merging bolt来聚合数据。

我想在一个螺栓中创建多个线程,因为在另一个螺栓中合并数据不是一个简单的过程。但是我发现我在互联网上发现了一些问题 https://mail-archives.apache.org/mod_mbox/storm-user/201311.mbox/%3CCAAYLz+pUZ44GNsNNJ9O5hjTr2rZLW=CKM=FGvcfwBnw613r1qQ@mail.gmail.com%3E 但没有明确的理由为什么不创建多个线程。任何指针都会有所帮助。

顺便说一句,这是否意味着我不应该使用 java8 的并行流功能以及 https://docs.oracle.com/javase/tutorial/collections/streams/parallelism.html 中提到的?

【问题讨论】:

  • 创建多个螺栓将是更清洁的方法。 Storm 应该管理所有线程。如果你启动你自己的线程,Storm 不会意识到它们。如果发生故障(即没有清理),这可能会成为问题。
  • 为什么要创建多个线程? Storm 的工作方式允许您通过增加 bolt 的任务数量来进行扩展。 Storm 为您管理所有线程复杂性和通信,因此您可以专注于处理。选择 #2 对我来说更有意义
  • 我认为这取决于您的用例。如果你有选择,那么使用 2) 因为它不会“破坏”storm,设计友好很重要,所以让storm决定如何使用拓扑分配工作。 Bolt 中的延迟过长是一个问题,有时,您希望在 Storm(非阻塞任务)中进行异步操作,因此在 Bolt 中使用线程是一种方法,但如果您有很多其他方法,您应该尝试可以以风暴友好的方式做到这一点,那就去吧。

标签: apache-storm distributed-system


【解决方案1】:

增加螺栓的tasks 数量,就像产生多个相同的实例。并且还要增加executors (threads)的数量来均匀处理。

确保#executors <= #tasks。 Storm 将为您完成剩下的工作。

【讨论】:

    猜你喜欢
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    相关资源
    最近更新 更多