0

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

我的问题是,当螺栓接收到单个块时,是否会仅将其发送给一个执行器,或者为了并行性而将其分配给不同的执行器。

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

4

2 回答 2

4

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

  1. 对于第一种情况,Storm 无法在单个元组中并行化这 100 行。Storm 只能将不同的元组发送给不同的执行者。
  2. 对于第二种情况,Storm 会将这 100 个元组发送到不同的执行器(当然,取决于您选择的连接模式)。

一方面说:在一次调用中发出多个元组被认为是不好的做法nextTuple()。如果nextTuple()由于任何原因阻塞,则 spout 线程被阻塞并且不能(例如)对传入acks的 . 最佳实践是,为每次调用发出一个元组nextTuple()。如果没有可发出的元组,则应返回(不发出)而不是阻塞,以等待元组可用。

于 2015-07-30T11:52:04.093 回答
0

executor = Threads

如果你没有明确配置任务(实例)的数量,那么storm默认每个执行器运行1个任务。所以实际上发生的情况是有 5 个不同的螺栓实例正在运行,由 5 个不同的线程处理(1 个线程处理 1 个任务)。

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

于 2015-07-30T04:54:56.027 回答