【发布时间】: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