风暴中的执行者

时间:2015-07-29 20:23:58

标签: parallel-processing apache-storm executors

我有一个与Storm功能有关的问题。假设我有一个正在读取csv文件的spout并按块发出记录块。也就是说,它一次向螺栓发出100条记录。

我的问题是,当螺栓接收时,单个块是否只会被发送给一个执行器,或者为了并行性而在不同的执行器之间进行划分。

注意:螺栓有5个执行器。

2 个答案:

答案 0 :(得分:4)

你是什么意思"它一次发出100条记录"?这是否意味着单个元组包含100个CSV行?或者在一次nextTuple()调用中发出100个元组(每个包含一个CSV行)。

  1. 对于第一种情况,Storm无法在单个元组中并行化这100行。 Storm只能向不同的执行者发送不同的元组。
  2. 对于第二种情况,Storm会将100个元组发送给不同的执行者(当然,这取决于您选择的连接模式)。
  3. 一方面评论:在nextTuple()的单个调用中发出多个元组被认为是不好的做法。如果nextTuple()由于任何原因而阻塞,则spout线程被阻止,并且不能(例如)对传入的acks做出反应。最佳做法是,为nextTuple()的每次调用发出一个元组。如果没有可以发出的元组,你应该返回(不发出)而不是阻塞,等待元组可用。

答案 1 :(得分:0)

executor = Threads

如果您没有明确配置任务数(实例),则默认情况下,storm将为每个执行程序运行1个任务。所以实际上发生了5个不同的螺栓运行实例,它由5个不同的螺纹处理(1个螺纹处理1个任务)。

理想情况下,您发出的元组将由5个不同的线程处理 同时